>>> import requests
>>> import bs4
>>> import re
>>> import pandas as pd
>>> full_dict={'Title':[],'Price':[],'Availability':[]}
>>> for index in range(1,50):
res=requests.get("http://books.toscrape.com/catalogue/category/books_1/index?={index}.html")
soup=bs4.BeautifulSoup(res.text,'lxml')
books=soup.find_all(class_='product_prod')
for book in books:
book_title=book.find(href=re.compile("title"))
book_price=book.find('div',{'class':'product_price'})
book_availability=book.find('p',{'class':'instock.availability'})
full_dict['Title'].append(title)
full_dict['Price'].append(price)
full_dict['Availability'].append(availability)
>>> df=pd.DataFrame(full_dict)
>>> print(df)
3 Réponses :
Il semble que vous obteniez une erreur 404 de la page Web P>
Non, ce n'est pas une erreur 404. Ce que je regrette dans la console, c'est ceci: "Colonnes de Dataframe vides: [Titre, prix, disponibilité] Index: []"
Mais obtenez-vous des données par ex. soupe code>?
OK, je viens de voir l'erreur:
Vos variables sont appelées par ex. Il doit être: p> book_title code>
Mais vous appendez juste titre code> p>
Maintenant, je ne reçois pas l'erreur de cadre de données vide. Maintenant, je reçois des colonnes vides.
Pouvez-vous poster un exemple de la dicle que vous utilisez? Je ne peux pas reproduire l'erreur car je reçois l'erreur 404 avec l'ouverture des pages HTML
livres.toscrape.com/index.html . Je veux feronner des détails sur le titre du livre, le prix et la disponibilité du livre pour les 50 premières pages
Code de @qHarr Works, vous avez également eu une erreur d'orthographe avec produit_prod code> au lieu de produit_pod code>
Vous devez modifier votre URL pour être correcte sinon 404. Je passerai également à des sélecteurs plus rapides et assurez-vous que vos noms de variables sont cohérents
import requests
import bs4
full_dict={'Title':[],'Price':[],'Availability':[]}
for index in range(1,3):
res = requests.get(f"http://books.toscrape.com/catalogue/page-{index}.html") #http://books.toscrape.com/catalogue/page-2.html
soup = bs4.BeautifulSoup(res.text,'lxml')
books = soup.select('.product_pod')
for book in books:
book_title = book.select_one('h3 a').text
book_price = book.select_one('.price_color').text.replace('Ã','')
book_availability = book.select_one('.availability').text.strip()
full_dict['Title'].append(book_title)
full_dict['Price'].append(book_price)
full_dict['Availability'].append(book_availability)