>>> 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)