BeautifulSoup。 2 个问题:find_all returns 空列表以及如何遍历封闭容器

BeautifulSoup. 2 Questions : find_all returns empty list AND how to iterate through closed container

我首先想说的是,我经历了很多关于BeautifulSoup return空列表的post,看来我的问题很特殊?

我正在尝试提取在此网站上找到的供应商信息:https://betonabq.org/les-membres/membres-producteurs-v2/

url = "https://betonabq.org/les-membres/membres-producteurs-v2/"
response = get(url)
html_soup = BeautifulSoup(response.content, 'lxml')
html_soup2 = BeautifulSoup(response.text, 'lxml')  

beton_containers = html_soup.find_all ('div', class_='mobmenu-push-wrap')
beton_containers2 = html_soup2.find_a ('div', class_='mobmenu-push-wrap')

2 个方法 return 空列表。我也试过 html.parser 和 html5lib.

我的第二个问题(也许换一个 post 比较合适)是:如何遍历此 Div Class 中包含的信息:

问题是每当我点击左侧列表中的供应商时,它都会附加相关 Div class 部分并显示相关信息。

不知道我说的够不够清楚,非常感谢你的帮助!

您得到的是空列表,因为所需数据是通过 JavaScriptapi calls json response 动态从外部源加载的,并且 beautifulsoup 无法呈现 js。但是您可以仅使用 requests 模块轻松地从 api 中获取任何您想要的所有数据。这是一个如何从 api.

中提取数据的示例
import requests

URL = "https://betonabq.org/wp-json/wpgmza/v1/features/base64eJyrVkrLzClJLVKyUqqOUcpNLIjPTIlRsopRMopR0gEJFGeUFni6FAPFomOBAsmlxSX5uW6ZqTkpELFapVoABXgWuw"
headers={
    'x-requested-with': 'XMLHttpRequest',
    'User-Agent':'mozila/5.0/'
    }
jsonData=requests.get(URL,headers=headers).json()
for item in jsonData['markers']:
    title= item['title'].replace('/ div.','')
    print(title)

输出:

Almamix ltée (Groupe Riverin)
Béton 34 inc.
Béton Alliance inc.  Béton Provincial
Béton Amix
Béton Barrette inc.
Béton Bélanger inc.  Béton Provincial
Béton Bellemare inc.
Les Bétons Bellemare
Les Bétons Bellemare
Béton Beloeil (2012) inc.
Béton Brisebois inc.
Béton Brunet 2001 inc.
Béton Brunet 2001 inc.
Béton Brunet 2001 inc.
Béton Brunet 2001 inc.
Béton Brunet 2001 inc.
Béton Brunet 2001 inc.
Béton Brunet 2001 inc.
Béton Carrière ltée  Béton Provinvial
Béton Carrière ltée  Béton Provinvial
Béton Central  Béton Provincial
Béton Central  Béton Provincial
Béton Central  Béton Provincial
Béton Charlevoix inc.
Béton Chevalier inc.
Béton Chevalier inc.
Béton Chevalier inc.
Béton Chevalier inc.
Béton Chevalier inc.
Béton Comeau division de Béton Préfabriqué du Québec
Béton Cowansville (1989) inc.
Béton Crête inc. / Division Mauricie
Béton Crête division du Fleuve
Béton Crête inc.
Béton de l\'Amiante div. Béton Provincial
Béton Deux-Montagnes inc.
Béton Drummond inc.
Béton Fortin inc.
Béton Fortin inc.
Béton Fortin inc.
Béton G.L.M.R. (1993) inc.  Béton Provincial
Béton Généreux inc.
Béton Généreux inc.
Béton HI-TECH inc.  Béton Provincial
Béton Laurier inc.
Béton Malette inc. div. Béton Provincial
Béton Marik inc.
Béton Mercier  Ciment Québec
Béton Miroc  Ciment Québec
Béton Miroc inc.  Ciment Québec
Béton Miroc inc.  Ciment Québec
Béton Mistral ltée  Béton Provincial
Béton Mobile du Québec div. Lafarge Canada Inc.
Béton Mobile Royal inc.  Béton Chevalier
Béton Petite-Nation inc.
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial ltée
Béton Provincial Ltée. div. Granby Ltée.
Béton Provincial Ltée. usine de Trois-Pistoles
Béton Régional inc.  Béton Provincial
Béton Régional inc.  Béton Provincial
Béton Rive-Nord inc.  Béton Provincial
Béton Rive-Nord inc.  Béton Provincial
Béton Rive-Nord inc.  Béton Provincial
Béton Rive-sud Lévis div. Béton Provincial
Béton Royal 2000 - Sherbrooke
Béton Royal 2000 -Richmond
Béton Saint Joseph  de Sintra inc.
Béton Saint-Éphrem inc.  Sintra inc.
Béton St-Georges  Sintra inc.
Béton St-Georges  Sintra inc.
Béton St-Marc div. Ciment Québec Inc.
Béton Suprême / Usine Foster  Carrières St-Dominique
Béton Vachon inc.
Bétonnière d\'Arvida / Groupe Riverin
Bétonnières d\'Arvida inc. (Groupe Riverin)
Bétonnières de La Baie (Groupe Riverin)
Bétonnières du Golfe inc. (Groupe Riverin)
Bétonnières du Golfe inc. (Groupe Riverin)
Bétonnières du Golfe inc. (Groupe Riverin)
Bétonnières du Golfe inc. (Groupe Riverin)
Bétonnières du Golfe inc. (Groupe Riverin)
Bétonnières Lac St-Jean inc. (Groupe Riverin)
Bétons du Côteau ltée
Bétons L. Barolet inc.
Bétons L. Barolet inc.
Lafarge usine de Longueuil
Bétons Mont-Carmel inc.
Bétons Trio inc.  Béton Provincial
Carrière Bernier ltée
Carrière d\'Acton Vale ltée
Carrière JFK
Carrières de St-Dominique ltée
Carrières de St-Dominique ltée
Carrières de St-Dominique ltée
Carrières de St-Dominique ltée
Carrières de St-Dominique ltée
Carrières St-Dominique ltée
Carrières St-Dominique ltée
Ciment Lacasse ltée  Béton Lacasse
Ciment Ro-No ltée
Ciment Ro-No ltée
Ciments Taschereau inc.
Danis Construction inc.
Demix Béton  Groupe CRH Canada inc.
Demix Béton  Groupe CRH Canada inc.
Demix Béton  Groupe CRH Canada inc.
Demix Béton  Groupe CRH Canada inc.
Demix Béton  Groupe CRH Canada inc.
Demix Béton  Groupe CRH Canada inc.
Demix Béton  Groupe CRH Canada inc.
Demix Béton  Groupe CRH Canada inc.
Demix Béton  Groupe CRH Canada inc.
Demix Béton div. de Groupe CRH Canada inc.
Entreprises L.T. ltée
Entreprises L.T. Ltée.
Entreprises L.T. Ltée.
Entreprises L.T. Ltée.
Gabriel Aubé inc.
Gérard Perron & Fils inc.  Béton Provincial
Jos Nicoletti & Fils inc/Béton Louis Cyr inc.
L. Fournier & Fils inc.
L. Fournier & Fils inc.
L. Fournier & Fils inc.
L. Fournier & Fils inc.
La Cimenthèque div. Béton Provincial ltée.
Lafarge Canada inc.
Lafarge Canada inc.
Lafarge Canada inc.
Lafarge Canada inc.
Lafarge Canada inc.
Lafarge Canada inc.
Lafarge Canada inc.
Lafarge Canada inc.
Les Clôtures Arboit inc.
Les Entreprises G Pouliot Ltée
Les Entreprises G. Pouliot ltée.
Les Entreprises G. Pouliot ltée.
Les Entreprises G. Pouliot ltée.
Baillargeon Matériaux inc.
Pierres et Béton St-Léonard ltée
Produits de Ciment Couillard ltée  Carrières St-Dominique
Rénova-Béton inc.
Sintra inc. div. Lamothe
Sintra inc. div. Lamothe
Meloche div. Sintra inc.
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Unibéton  Ciment Québec
Uniroc inc.
Béton 2000 inc.
Béton Provincial ltée.
Béton Provincial ltée.
Béton Tremblay div. Béton Provincial ltée.
Les Excavations Marchand & Fils inc.

我在 devtools 中找到了这个 url network in devtools

你可以这样使用它:

import requests


user = requests.Session()
user.headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}

def main():
    url = 'https://betonabq.org/wp-json/wpgmza/v1/marker-listing/base64eJyrVirIKHDOSSwuVrJSCg9w941yjInxTSzKTi3yySwuycxLB3LzU1KL8pR0lIpLEotKlKwMdJRyUvPSSzKUrHQNdZRyEwviM1OA2o2UagE9Lxn8'

    response = user.get(url)
    json_data = response.json()
    data = json_data['data']
    # print(data)
    for item in data:
        print(item['description'])

if __name__ == '__main__':
    main()

输出:Output image

毕竟你可以使用 bs4 来解析它