Python 从olx获取二手车价格的网络抓取
我是python新手。我最近学习了python,作为我的第一个项目,我决定为OLX创建一个web scraper,它将为我提供SUV的各种广告及其价格和链接,因为我们计划购买一辆汽车,所以我认为这不仅是一个好项目,而且我还将实时使用它。 该网站的连结如下: 我希望它给我的名称,价格,和我的搜索相关的广告链接 名称和价格在span类中,但由于我不了解CSS,我不理解它的含义以及如何提取其中的数据 梅赛德斯-奔驰C级250前卫,2018,柴油机 这就是名称的存储方式 ₹ 33,50,000 这就是价格的存储方式Python 从olx获取二手车价格的网络抓取,python,web-scraping,Python,Web Scraping,我是python新手。我最近学习了python,作为我的第一个项目,我决定为OLX创建一个web scraper,它将为我提供SUV的各种广告及其价格和链接,因为我们计划购买一辆汽车,所以我认为这不仅是一个好项目,而且我还将实时使用它。 该网站的连结如下: 我希望它给我的名称,价格,和我的搜索相关的广告链接 名称和价格在span类中,但由于我不了解CSS,我不理解它的含义以及如何提取其中的数据 梅赛德斯-奔驰C级250前卫,2018,柴油机 这就是名称的存储方式 ₹ 33,50,000 这就是价
请帮帮我 如果您不想使用刮取框架或html解析器,可以使用正则表达式进行一些非常基本的刮取 正如您所注意到的,如果信息存储在
标记中,则所有这些都是必需的。此外,这些标签中的每一个都有一个data aut id=“something”
,其中something是标签中的信息。因此,您可以为您关心的每个信息构建正则表达式(regex)
re.findall
将查找所有出现的标记,并将其中的内容(使用捕获组)提取到列表中。然后,您可以将所有这些列表压缩在一起
要查找和获取广告链接,您必须将其从
标记中的href
参数中拉出。方便的是,所有的汽车都在列表项中,带有数据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')]
导入请求
进口稀土
url_base=”https://www.olx.in"
url=url\u base+“/pune\u g4059014/cars\u c84”
信息标签=(“项目价格”、“项目标题”、“项目详细信息”、“项目位置”)
信息模式=r'(?s)(*?)
link_pattern=r'(?s)欢迎来到SO!到目前为止你试过什么?你能给我们看一下你的代码吗?如果我想让它找到包含某些单词的信息,我该怎么做?我希望它只提供SUV广告,因此我希望广告中包含诸如“XUV”、“天蝎座”或“财富”(车辆名称)之类的词。我如何做到这一点,而此代码没有提供广告的链接。@Phoenix-更新以添加链接。您可以根据自己的喜好对SUV进行筛选,例如,cars=list(筛选(lambda car:any(车内关键字[1]表示“SUV”、“蝎子”、“财富”)),cars))
,但这超出了这个问题的范围。@Phoenix,很高兴能提供帮助。如果我已经充分回答了你的问题,请注明:)