Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从olx获取二手车价格的网络抓取_Python_Web Scraping - Fatal编程技术网

Python 从olx获取二手车价格的网络抓取

Python 从olx获取二手车价格的网络抓取,python,web-scraping,Python,Web Scraping,我是python新手。我最近学习了python,作为我的第一个项目,我决定为OLX创建一个web scraper,它将为我提供SUV的各种广告及其价格和链接,因为我们计划购买一辆汽车,所以我认为这不仅是一个好项目,而且我还将实时使用它。 该网站的连结如下: 我希望它给我的名称,价格,和我的搜索相关的广告链接 名称和价格在span类中,但由于我不了解CSS,我不理解它的含义以及如何提取其中的数据 梅赛德斯-奔驰C级250前卫,2018,柴油机 这就是名称的存储方式 ₹ 33,50,000 这就是价

我是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,很高兴能提供帮助。如果我已经充分回答了你的问题,请注明:)