用 Beautiful soup 在凌乱的网站中提取密钥

Extract key in messy website with Beautiful soup

我刚开始使用漂亮的汤进行网络抓取,但遇到了一些问题...

这是我的代码

from bs4 import BeautifulSoup
import numpy as np
from time import sleep
from random import randint
from selenium import webdriver


page="https://www.acheteralasource.com/producteurs-en-france/all/departement/75/page/1" 
driver = webdriver.Chrome()
driver.get(page)  
sleep(randint(2,10)) # avoid beeing blocked by IP
soup = BeautifulSoup(driver.page_source, 'html.parser')
my_table = soup.find_all(class_=['companyName', 'presentation','addressCity',\
     'addressPostalCode'])

我想获取下面目标列表中的一些信息,但是当我打印 table 时,它返回一个空列表...

很遗憾,此网站没有 API 可用..

有帮助吗?

没有api,但是<script>标签里的数据是json的格式:

代码:

import requests
from bs4 import BeautifulSoup
import re
import json
import pandas as pd

url = "https://www.acheteralasource.com/producteurs-en-france/all/departement/75/page/1"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'}

r = requests.get(url, headers=headers)
page_html = r.text
soup = BeautifulSoup(page_html, 'html.parser')

scripts = soup.find_all('script')


script = str(scripts[4])

jsonStr = re.match('.*__APOLLO_STATE__=({.*})' , script).group(1)
jsonData = json.loads(jsonStr)

results = []
for k, v in jsonData.items():
    if 'Producer' in k:
        categories = v.pop('categories')['json']
        addressCoordiantes = v.pop('addressCoordinates')['json']
        
        alpha = v.copy()
        alpha.update({'categories':categories,
                  'addressCoordiantes':addressCoordiantes})
        
        results.append(alpha)

df = pd.DataFrame(results)
df['latitude'], df['longitude'] = zip(*list(df['addressCoordiantes'].values))

输出:

print(df)
        id                                 companyName  ...  latitude  longitude
0   168704                                   La SAUGE   ...  2.376545  48.880406
1   168702                                   La SAUGE   ...  2.376545  48.880406
2   164858                                cfraisclivre  ...  2.256519  48.822534
3   144464                   Le Rucher de Sainte Aulde  ...  2.434072  48.871433
4   169286                           Cultures en ville  ...  2.269878  48.830487
5   136834                                Bell'Abeille  ...  2.349333  48.883017
6   238911                    Les Ruchers de Montreuil  ...  2.442508  48.862581
7   238678                                   Miel OTT   ...  2.357560  48.870498
8   168791  BienElevées - Maison d'agriculture urbaine  ...  2.325042  48.858802
9   114454                             Dobreiu Nicolae  ...  2.345627  48.888822
10  169233                 Famille Herbelin Apiculture  ...  2.306824  48.822076
11  169495                                   APIS CIVI  ...  2.352293  48.887543
12  169394                  Association Les Ruches POP  ...  2.371658  48.879516
13   38919                                  Télé Sapin  ...  2.341048  48.862797
14   28430                         La Ferme Parisienne  ...  2.354042  48.887165
15   28428   I.T.A.V.I (Institut Technique Aviculture)  ...  2.322347  48.876362
16   18815              Maryse Gaitelli Duc de Brabant  ...  2.330939  48.897045
17   18810                     LES VIGNERONS DE CARNAS  ...  2.351173  48.835880
18   18808                    Les Domaines Qui Montent  ...  2.303042  48.881824
19   18807                                Le Nez Rouge  ...  2.302591  48.847828
20   18806           La Maison du Vin et des Vignobles  ...  2.293603  48.886036
21   18803                        Jambon-Chanrion Paul  ...  2.321920  48.859814
22   18798                  Domaine Les Roques De Cana  ...  2.468187  48.831852
23   18797                Domaine Clarence Dillon (SA)  ...  2.300900  48.870148
24   18795                             Château Margaux  ...  2.303760  48.865993
25   18792                    Champagne Louis Roederer  ...  2.322103  48.871593
26   18788                                     Bristol  ...  2.289587  48.871471
27   18787                                Borie-Manoux  ...  2.294968  48.880180
28   18785                             BOCQUILLON (SA)  ...  2.303881  48.885979
29   18780                    Vignerons de Paris (Les)  ...  2.386668  48.855598
30   18779                  Versein et Minvielle (Sté)  ...  2.336202  48.867680
31   18778                                         V 3  ...  2.339331  48.856140
32   18777                               Travers Marie  ...  2.321962  48.888638
33   18776                      Tour des Chênes (SARL)  ...  2.340296  48.839760
34   18775                        Société Des Domaines  ...  2.345637  48.838497
35   18772                                      RDVINS  ...  2.375235  48.857235
36   18771                            Quié Jean-Michel  ...  2.407137  48.825703
37   18770                           Pavillon des Vins  ...  2.392453  48.826790
38    5742                             Fromageries Bel  ...  2.320089  48.871593
39    4994                                Matines (SA)  ...  2.414774  48.867092
40    2744                          Damolini Bonduelle  ...  2.292681  48.894718
41     951                                     Kanabou  ...  2.241684  48.832230
42  154464                               Nuage Sauvage  ...  2.385420  48.870101
43   76256                                LES ABEILLES  ...  2.349466  48.827641
44   76253                         L'Abeille de France  ...  2.320717  48.880245
45   76247                                     Au Miel  ...  2.317932  48.879715
46   76244             Un apiculteur pres de chez vous  ...  2.406641  48.859982
47   76231                              Maison du Miel  ...  2.326399  48.871696

[48 rows x 11 columns]