当前位置:   article > 正文

python爬虫——汽车之家数据_汽车之家爬虫

汽车之家爬虫

相信很多买车的朋友,首先会在网上查资料,对比车型价格等,首选就是“汽车之家”,于是,今天我就给大家扒一扒汽车之家的数据:

一、汽车价格:

首先获取的数据是各款汽车名称、价格范围以及最低指导价:

  1. def get_oa_price(self):
  2. try:
  3. oa_price_data_list=[]
  4. for page in range(1,27):
  5. oa_price_api = f"https://price.16888.com/gz/search-0-0-0-0-0-0-0-0-0-1-0-0-0-0-{page}.html"
  6. response = self.sc.get_html(oa_price_api)
  7. if not response:
  8. print('城市页请求失败')
  9. return 0
  10. #燃油车数据块
  11. oa_data_= re.findall(r'<div class="style-box ">\s+<ul class="clearfix">([\s\S]*?)</ul>',response.text)[0]
  12. #燃油车id和名字列表
  13. car_id_name_list = re.findall(r'data-sid="(\d+)" data-name="(.*?)">',oa_data_)
  14. # 价格范围列表
  15. price_range_list = re.findall(fr'<p>(.*?)\s+<span class="', response.text) if len(car_id_name_list)==len(price_range_list):
  16. for index,car_list in enumerate(car_id_name_list):
  17. car_id,car_name = car_list
  18. #价格范围
  19. price_range = price_range_list[index]
  20. #最低价
  21. price_min = int(eval(price_range.split('-')[0])*10000)
  22. oa_price_data_list.append((int(car_id),car_name,price_range,price_min))
  23. # print(price_min)
  24. if not oa_price_data_list or not len(oa_price_data_list):
  25. return 0
  26. print(oa_price_data_list)
  27. print("燃油车价格已经爬取完成")
  28. return 1
  29. except:
  30. self.sc.collect_error()

结果输出如下:

二、汽车销量:

一般买东西,尤其网上买东西,一看价格,二看销量、三看汽车性能检测怎么样。销量好不好有时候也会决定买不买:

  1. def get_ea_sale(self):
  2. try:
  3. ea_sale_data_list = []
  4. for year in range(2018,2021):
  5. for month in range(1, 13):
  6. if month>9:
  7. date_ = str(year) + str(month)
  8. else:
  9. date_ = str(year) + "0" + str(month)
  10. for i in range(1,3):
  11. ea_sale_api = f"https://xl.16888.com/ev-{date_}-{date_}-{i}.html"
  12. print(ea_sale_api)
  13. response = self.sc.get_html(ea_sale_api)
  14. if not response:
  15. print('城市页请求失败')
  16. return 0
  17. re_no = re.findall(r'<p>暂时没有 <em>电动车</em>&nbsp;<em>\d+.\d+</em>&nbsp;的销量数据</p>',response.text)
  18. if re_no and len(re_no):
  19. print("没第二页")
  20. break
  21. # 销量数据块
  22. ea_sale_data_ = re.findall(r'<th width="\w+">车型相关</th>([\s\S]*?)<div class="xl-data-pageing lbBox">',
  23. response.text)[0]
  24. # 燃油车id和名字列表
  25. car_id_name_list = re.findall(r'<td class="xl-td-\w+"><a href="/s/(\d+)/" target="_blank">(.*?)</a></td>', ea_sale_data_)
  26. # 销量列表
  27. sale_list = re.findall(r'<td class="xl-td-t3">(\d+)</td>', ea_sale_data_)
  28. if len(car_id_name_list) == len(sale_list):
  29. for index, car_list in enumerate(car_id_name_list):
  30. car_id, car_name = car_list
  31. # 价格范围
  32. sale_num = int(sale_list[index])
  33. ea_sale_data_list.append((int(car_id), car_name, sale_num,date_))
  34. #没有列表数据
  35. if not ea_sale_data_list or not len(ea_sale_data_list):
  36. return 0
  37. print(ea_sale_data_list)
  38. print("电动车销量已经爬取完成")
  39. return 1
  40. except:
  41. self.sc.collect_error()

结果输出如下:

三、汽车评论:

俗话说:买东西看三宝,一看价格,二看销量,三看评论。

  1. def car_comment(self):
  2. try:
  3. ea_com_api = f"https://k.autohome.com.cn/ajax/getSceneSelectCar?minprice=2&maxprice=110&_appid=koubei&fueltype=4"
  4. response = self.sc.get_html(ea_com_api)
  5. if not response:
  6. print('车型列表请求失败')
  7. return 0
  8. ea_com_json=json.loads(response.text)
  9. # print(ea_com_json)
  10. result_list = ea_com_json['result']
  11. for result in result_list:
  12. ea_com_data_list = []
  13. car_id = int(result['SeriesId'])
  14. car_name = result['SeriesName']
  15. print(car_name)
  16. com_api = f"https://k.autohome.com.cn/{car_id}/index_1.html"
  17. com_resp = self.sc.get_html(com_api)
  18. if not com_resp:
  19. print('口碑列表请求失败')
  20. continue
  21. #查看口碑的条数
  22. com_num_list = re.findall(r'<span class="fn-right \w+">共有(\d+)条口碑</span>',com_resp.text)
  23. if not com_num_list or not len(com_num_list):
  24. print("没有口碑")
  25. api_ip = 'http://ip.dobel.cn/switch-ip'
  26. api_ip_resp = self.sc.get_html(api_ip)
  27. time.sleep(1)
  28. com_api = f"https://k.autohome.com.cn/{car_id}/index_1.html"
  29. com_resp = self.sc.get_html(com_api)
  30. if not com_resp:
  31. print('口碑列表请求失败=========')
  32. continue
  33. # 查看口碑的条数
  34. com_num_list = re.findall(r'<span class="fn-right \w+">共有(\d+)条口碑</span>', com_resp.text)
  35. if not com_num_list or not len(com_num_list):
  36. print("没有口碑=========")
  37. continue
  38. com_num = int(com_num_list[0])
  39. if com_num>15:
  40. #翻页
  41. page_num_list = re.findall(r"<span class='page-item-info'>共(\d+)页</span>",com_resp.text)
  42. if not page_num_list or not len(page_num_list):
  43. print("没有口碑")
  44. page_num = 1
  45. else:
  46. page_num = int(page_num_list[0])
  47. else:
  48. page_num = 1
  49. for page in range(1,page_num+1):
  50. com_api2 = f"https://k.autohome.com.cn/{car_id}/index_{page}.html"
  51. print(com_api2)
  52. com_resp2 = self.sc.get_html(com_api2)
  53. if not com_resp2:
  54. print('口碑列表2请求失败')
  55. api_ip = 'http://ip.dobel.cn/switch-ip'
  56. api_ip_resp = self.sc.get_html(api_ip)
  57. time.sleep(1)
  58. com_resp2 = self.sc.get_html(com_api2)
  59. if not com_resp2:
  60. print('口碑列表3请求失败')
  61. continue
  62. #评论id和评论链接
  63. com_id_url_list = re.findall(r'发表了口碑\s+<a href="(.*?)"',com_resp2.text)
  64. if not com_id_url_list or not len(com_id_url_list):
  65. print("没有口碑id")
  66. api_ip = 'http://ip.dobel.cn/switch-ip'
  67. api_ip_resp = self.sc.get_html(api_ip)
  68. time.sleep(1)
  69. com_resp3 = self.sc.get_html(com_api2)
  70. if not com_resp3:
  71. print('口碑列表3请求失败========')
  72. continue
  73. # 评论id和评论链接
  74. com_id_url_list = re.findall(r'发表了口碑\s+<a href="(.*?)"', com_resp3.text)
  75. if not com_id_url_list or not len(com_id_url_list):
  76. print("没有口碑id======")
  77. continue
  78. for com_id_url in com_id_url_list:
  79. com_url = com_id_url
  80. #以时间戳作为评论id
  81. com_id = str(uuid.uuid4())
  82. ea_com_data_list.append((car_id,car_name,com_id,com_url))
  83. # 没有列表数据
  84. if not ea_com_data_list or not len(ea_com_data_list):
  85. return 0
  86. print(f"汽车之家{car_name}评论id已经爬取完成")
  87. return 1
  88. except:
  89. self.sc.collect_error()
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

以上就是我的分享,如果有什么不足之处请指出,多交流,谢谢!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/659764
推荐阅读
相关标签
  

闽ICP备14008679号