python-3.x - 为什么下面的代码没有带来结果?我希望看到一个包含:书名,书价的表格
问题描述
我运行了以下代码,但它没有返回表格。相反,我得到了[]。我把我的代码写成:
>>> 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
解决方案
您的代码中有许多错误。
- 您使用
f-string
的符号没有f-string
- 你的网址有误
- 班级
product_pod
不是product_prod
- 您查找标题、价格和可用性的方法不正确。
您可以尝试以下方法:
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
推荐阅读
- c++ - 使用 boost async_read 和 posix::stream_descriptor 从键盘读取
- java - Apache POI 是否支持对单词进行两次签名?
- svg - 将 Google 字体添加到 SVG 文件
- reactjs - 在 Typescript 中处理嵌套的可能为空的值
- batch-file - WshShell.SendKeys 不适用于 Alt+Enter
- javascript - 如何从动态创建的复选框 javascript 中制作复选框事件
- reactjs - React + Redux + JS SDK 事件
- c# - 如何在 ASP.NET MVC 5 中验证未授权用户
- scala - 如何在play框架的Module.scala中初始化一个DB连接
- image - 有没有办法从手机图库中读取缩略图?