python - 网络抓取从 olx 获取二手车价格
问题描述
我是 python 新手。我最近学习了 python,作为我的第一个项目,我决定为 OLX 创建一个网络爬虫,它会给我各种 SUV 的广告以及它们的价格和链接,因为我们正计划购买一辆车,所以我认为它不仅会是一个很好的项目,但我也会实时使用它。该网站的链接是 - https://www.olx.in/pune_g4059014/cars_c84 我希望它向我发送与我的搜索相关的广告的名称、价格和链接。
名称和价格在 span 类中,但由于我不了解 CSS,我不明白它的含义以及如何提取其中的数据。在此处输入图像描述
Mercedes-Benz C-Class 250 Avantgarde, 2018, Diesel 这就是名称的存储方式。
₹33,50,000 这就是价格的存储方式。
请帮帮我!
解决方案
如果您不想使用抓取框架或 html 解析器,您可以使用带有re的正则表达式进行一些非常基本的抓取。
正如您所注意到的,所有信息都存储在<span>
标签中。此外,这些标签中的每一个都有标签data-aut-id="something"
内的信息。因此,您可以为您关心的每个信息构建一个正则表达式 (regex)。
re.findall
将找到所有出现的标记并将其中的内容(使用捕获组)提取到列表中。然后,您可以将所有这些列表压缩在一起。
要找到获取广告链接,您必须将其从标签中的href
参数中拉出。<a>
方便的是,所有汽车都在列表项<li>
中,data-aut-id="itemBox"
因此正则表达式可以在此之后查找第一个href
。
import requests
import re
url_base = "https://www.olx.in"
url = url_base + "/pune_g4059014/cars_c84"
info_labels = ("itemPrice", "itemTitle", "itemDetails", "item-location")
info_pattern = r'(?s)<span.*?data-aut-id="{}".*?>(.*?)</span>'
link_pattern = r'(?s)<li.*?data-aut-id="itemBox".*?href="([^"]+?)"'
response = requests.get(url)
cars = list(zip(
*(re.findall(pattern.format(label), response.text) for label in info_labels),
(url_base + path for path in re.findall(link_pattern, response.text))
))
cars[:3]
[('₹ 38,50,000',
'Audi A6 2.0 TDI Premium Plus, 2018, Diesel',
'2018 - 10,500 km',
'Shivaji Nagar, Pune',
'https://www.olx.in/item/audi-a6-20-tdi-premium-plus-2018-diesel-iid-1559999282'),
('₹ 19,00,000',
'Ford Endeavour 2017 Diesel Well Maintained',
'2017 - 60,000 km',
'Lumbini nagar, Pune',
'https://www.olx.in/item/ford-endeavour-2017-diesel-well-maintained-iid-1570685051'),
('₹ 33,50,000',
'Mercedes-Benz C-Class 250 Avantgarde, 2018, Diesel',
'2018 - 20,000 km',
'Shivaji Nagar, Pune',
'https://www.olx.in/item/mercedes-benz-c-class-250-avantgarde-2018-diesel-iid-1554189590')]
然后您可以使用 csv 库来输出它!
推荐阅读
- windows - 如何以链接方式在 Windows 中运行程序,就像在 Ubuntu 中的终端中一样?
- javascript - Apollo GraphQL:如何拥有使用递归的解析器?
- azure - Azure CosmoDB 没有设置缩放模式的选项,即使文档这么说
- typoscript - 用打字稿识别替代语言的主页
- maxima - WxMaxima 求解方程导致复数?
- redirect - Netlify 上 Next.js 的尾随斜杠不起作用
- azure - 由于意外的全局管理员自删除尝试导致 Azure AD 导出失败
- node.js - 我想一步一步迁移,但 typeorm 为我生成
- javascript - 如何禁用AngularJS中的锚标签?
- php - 警告:尝试访问 C:\xampp\htdocs\wordpress2\wp-content\themes\sport-ak\framework 中 bool 类型值的数组偏移量