0
votes

Comment puis-je ré-écrire le code ci-dessous pour obtenir un ensemble de données réel au lieu de la réponse de cadre de données vide que je reçois?

J'ai écrit les lignes de code suivantes pour supprimer un site Web de book Store pour obtenir; Le titre du livre, le prix du livre et la disponibilité du livre. Mon code fonctionne bien mais je reçois un cadre de données vide au lieu des données que je veux. Veuillez aider
>>> 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)


0 commentaires

3 Réponses :


0
votes

Il semble que vous obteniez une erreur 404 de la page Web


2 commentaires

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 ?



0
votes

OK, je viens de voir l'erreur:

Vos variables sont appelées par ex. book_title Mais vous appendez juste titre

Il doit être: xxx


4 commentaires

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 au lieu de produit_pod



1
votes

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)


0 commentaires