【发布时间】:2020-04-24 13:52:12
【问题描述】:
我需要从多个网站抓取汽车排名。
例如:
https://www.kbb.com/articles/best-cars/10-best-used-cars-under-10000/
- 2011款丰田凯美瑞
- 2013款本田思域 ...
https://www.autoguide.com/auto-news/2019/10/top-10-best-cars-for-snow.html
道奇 Charger AWD 斯巴鲁傲虎 日产 Altima AWD ...
我无法检测网站上的排名,因为它们都有点不同。我的目标基本上是在任何给定的汽车网站上拥有一个能够自动检测排名并以相当高的准确度检索我需要的数据(排名中的品牌 + 车型)的脚本。
我想收集的他们的数据(排名中的品牌+车型)有时在 H2、H3 或 H4 中,有时在链接中...... 有时会写成“1. Brand1 Model1, 2. Brand2 Model2...” 有时“Brand1 Model1,Brand2 Model2……” 这取决于...
我正在 Python 中使用 BeautifulSoup 进行此操作。
什么是好的方法?
编辑:
要明确的是,我正在努力分析数据,而不是抓取它(参见下面的 cmets)。 但为了清楚起见,这是我处理上面第一个示例的方式:
for url in urls:
req = requests.get(url)
soup = BeautifulSoup(req.text, "lxml")
for sub_heading in soup.find_all('h2'):
if str(1) + ". " in sub_heading.text and "11." not in sub_heading.text: #filter applied to keep only strings starting with "1. "
list_url.append(url)
print(list_sub_heading)
结果: ['1。 2011丰田凯美瑞']
【问题讨论】:
-
如果数据更动态且受 java 脚本控制,那么 selenium 会是更好的选择。
-
是的,我也在使用请求。需要明确的是,我大部分时间都可以废弃数据。但是我在数据中遇到了麻烦,无法从我收集的所有数据中检测排名。
-
@Sureshmani 听起来很有趣。你能扩大一点吗?
-
@DemianWolf 谢谢,这很酷。话虽如此,我的问题更多的是,开发“始终”有效的解决方案的正确方法是什么。您的解决方案适用于 example1,但不适用于 ex2
-
@user1564140 检查我的以下答案
标签: python web-scraping beautifulsoup