首页 > 解决方案 > 为什么下面的代码没有带来结果?我希望看到一个包含:书名,书价的表格

问题描述

我运行了以下代码,但它没有返回表格。相反,我得到了[]。我把我的代码写成:

    >>> 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(book_title)
            full_dict['Price'].append(book_price)
            full_dict['Availability'].append(book_availability)


    >>> df=pd.DataFrame(full_dict)
    >>> print(df)

我希望在本网站的前 50 页中获得包含书名、价格和可用性(无论书是否有货)的表格:http: //books.toscrape.com/index.html

标签: python-3.xpandaspython-requests

解决方案


您的代码中有许多错误。

  1. 您使用f-string的符号没有f-string
  2. 你的网址有误
  3. 班级product_pod不是product_prod
  4. 您查找标题、价格和可用性的方法不正确。

您可以尝试以下方法:

import requests
import bs4
import re
import pandas as pd
full_dict={'Title':[],'Price':[],'Availability':[]}
for index in range(1,50):
    res=requests.get(f"http://books.toscrape.com/catalogue/category/books_1/page-{index}.html")
    soup=bs4.BeautifulSoup(res.text,'lxml')
    books=soup.find_all(class_='product_pod')
    for book in books:
        book_title=book.find(True, {'title': True}).attrs['title']
        book_price=book.find('div',{'class':'product_price'}).find('p', {'class': 'price_color'}).text
        book_availability=b.find('p',{'class':'instock availability'}).text.strip()
        full_dict['Title'].append(book_title)
        full_dict['Price'].append(book_price)
        full_dict['Availability'].append(book_availability)


df=pd.DataFrame(full_dict)
print(df)

#Remove weird A character
df['Price'] = df.Price.str.strip('Â')




                                                Title    Price Availability
0                                 A Light in the Attic  £51.77     In stock
1                                   Tipping the Velvet  £53.74     In stock
2                                           Soumission  £50.10     In stock
3                                        Sharp Objects  £47.82     In stock
4                Sapiens: A Brief History of Humankind  £54.23     In stock

推荐阅读