导入请求 从bs4导入BeautifulSoup 进口熊猫作为pd 定义main(): 数据=[] 对于范围(1,51)中的page_num: url=f’ https://books.toscrape.com/catalogue/page- {page_num}.html“ headers={'user-agent':'Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/124.0.0.0 Safari/537.36'} response=requests.get(url,headers=headers) 汤=BeautifulSoup(response.content,“lxml”) books=soup.find_all('article',class_='product_pod') 对于书中之书: name=book.find('img').attrs['alt'] price=book.find('p',class_='price_color').text.strip() 链接=' https://books.toscrape.com/ '+book.find('a').attrs['href'] stock=book.find('p',class_='库存可用性').text.strip() data.append([名称、价格、链接、股票]) df=pd.DataFrame(数据,列=[“名称”,“价格”,“链接”,“股票”]) df.to_csv('data.csv') main()
-
7 \$\开始组\$ 欢迎来到代码审查! 为了帮助评论员给你更好的答案,我们需要知道 代码的目标是什么 。请在问题中添加足够的上下文来描述 目的 代码的。 我们想知道 为什么 远远超过 怎样 。你告诉我们的越多 你的代码是为了什么 ,评论员就越容易帮助你。 也, 编辑 这个 标题 简单地 总结任务 ,而不是您对代码的担忧。 \$\端组\$ – 托比·斯皮特 5月9日9:58 -
\$\开始组\$ 这里没有什么可回顾的。 我会说把它做完 黑色 和 薄片8 ,给函数取一个更好的名称,你就很好了。 \$\端组\$ – 戈伦 5月9日15:04
3个答案
对于范围(1,51)中的page_num: 结果=fetch_page(page_num:int): 。。。
df.to_csv('data.csv',索引=False)
>>>pd.read_csv('data.csv') #未命名:0名称价格链接股票 #0 0阁楼上的灯51.77英镑 https://books.toscrape.com/a-light-in-the-atti。。。 有现货的 #11向天鹅绒小费53.74英镑 https://books.toscrape.com/tipping-the-velvet_。。。 有现货的 # .. ... ... ... ... ...
我有一种情况,有时当我从df中读取csv时,会得到一个不需要的类似索引的列,名为Unnamed:0。
这太烦人了! 有人知道如何解决这个问题吗?
不要在默认参数(例如。, class_=“product_pod” -> class_='product_pod' ) 除非需要(例如。, “lxml” 是双倍的,而其他一切都是单一的) 在逗号后使用空格(例如。, 范围 和 数据.附件 缺少一些空格)
而不是 主要的 做我会做的所有工作 主要的 调用一个或多个其他方法(使用描述性名称,例如。 刮擦_页面 ) (1,51) -什么是 51 ? (巧妙的问题,这是一个 幻数 )它可能会改变吗? 这可能是 刮擦_页面 例如 def scrape_pages(最大页面) 你正在设置 标题 在每个页面上循环迭代-看起来像是浪费了工作 我可能会将“页面浏览”主体和“书籍浏览”主体分解为各自的方法。 我意识到,实施这一点可能会否定我之前的观点。 我可能也会 刮擦_页面 返回数组,然后由调用代码决定如何处理它,例如。 写入到csv