I first want to say that I went through a lot of posts about BeautifulSoup returning empty lists and it seems that my problem is particular?
I'm trying to extract the information of suppliers found on this website :
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')
the 2 methods return empty list. I also tried with html.parser and html5lib.
The second question I have (maybe it would be appropriate to make a different post) is : how can I iterate through information contained in this Div Class :
The problem is that whenever I click on a supplier from the left list, it appends the concerned Div class section and shows associated information.
I don't know if I was clear enough but thanks a lot for the help!
CodePudding user response:
You are getting empty list because the desired data is dynamically loaded from external source via JavaScript
from api calls json response
and beautifulsoup
can't render js. But you can easily grab all data whatever you want from api using requests
module only. Here is an example how to pull data from 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)
Output:
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.
CodePudding user response:
I found this url in devtools network in devtools
And u can use it like this:
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: Output image
after all u can use bs4 for parsing it