Как я могу переписать приведенный ниже код, чтобы получить реальный набор данных вместо ответа пустого кадра данных, который я получаю? - PullRequest
0 голосов
/ 20 сентября 2019

Я написал следующие строки кода, чтобы получить доступ к сайту книжного магазина;название книги, цена книги и доступность книги.Мой код работает хорошо, но вместо данных, которые я хочу, я получаю пустой фрейм данных.Пожалуйста, помогите

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

Я хочу, чтобы название книги, цена книги и доступность книги (независимо от наличия книги в наличии) отображались как результаты.Форма http://books.toscrape.com/index.html, для первых 50 страниц

Ответы [ 3 ]

1 голос
/ 20 сентября 2019

Вам нужно изменить свой URL, чтобы он был правильным, иначе 404. Затем я бы также переключился на более быстрые селекторы и убедился бы в том, что имена ваших переменных согласованы

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 голосов
/ 20 сентября 2019

хорошо, я только что увидел ошибку:

ваши переменные называются, например, book_title, но вы добавляете просто title

это должно быть:

full_dict['Title'].append(book_title)
full_dict['Price'].append(book_price)
full_dict['Availability'].append(book_availability)
0 голосов
/ 20 сентября 2019

Похоже, вы получаете 404 Ошибка с веб-страницы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...