首页 > 解决方案 > 网络抓取从 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 这就是价格的存储方式。

请帮帮我!

标签: pythonweb-scraping

解决方案


如果您不想使用抓取框架或 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 库来输出它!


推荐阅读