【发布时间】:2021-12-04 07:59:18
【问题描述】:
我一直在尝试用漂亮的汤来练习网页抓取。但是每次我改变一个网站时,标签结构都是如此不同,这真的让我很困惑。这次我尝试抓取亚马逊畅销网站(https://www.amazon.com/Best-Sellers-Appstore-Android/zgbs/mobile-apps/ref=zg_bs_unv_mas_1_9408444011_1)的排名,名称,评分,以及评论数量(在下图中圈出)。
我的想法是找到每个项目的“主要”标签,然后挖掘包含我想要的信息的标签。所以我使用了 .select() 并从“li 类”开始。但是当我尝试在“span.a-list-item”之后添加标签时,我会得到以下代码的空结果,
container = page.select('li.zg-item-immersion > span.a-list-item > div.a-section a-spacing-none aok-relative' )
我可以在 .select() 中设置标签限制还是我做错了什么?
所以我停在“span.a-list-item”并尝试了以下方法,但我不明白为什么我的代码有时会给我空结果,有时会返回我想要的东西......我猜这个与网站的连接有关吗?
from bs4 import BeautifulSoup
import requests
url = "https://www.amazon.com/Best-Sellers-Appstore-
Android/zgbs/mobile-apps/ref=zg_bs_unv_mas_1_9408444011_1"
page = BeautifulSoup(requests.get(url).content,'lxml')
containers = page.select('li.zg-item-immersion > span.a-list-item')
ranking = (containers[1].find("span",class_="zg-badge-text").text)[1:]
在最后一行,我能够使用那行代码成功获得排名数字,但是当我尝试将它们附加到带有循环的列表中时,
for item in range(50):
ranking.append((containers[item].find("span",class_="zg-badge-text").text)[1:])
我不断收到“列表索引超出范围”错误,我不明白为什么它超出范围,因为单个页面上有 50 个项目。
最后但并非最不重要的一点是,我能否获得一些关于学习浏览不同网站的建议?我还阅读了 beautifulsoup 文档并按照说明使用不同的功能来获取特定标签,但仍然没有得到我想要的...
【问题讨论】:
标签: python html web-scraping beautifulsoup