参考大哥,感谢大哥:https://blog.csdn.net/weixin_43498642/article/details/136896338
【任务目标】
工作需要想更方便地下载汽车之家某车系配置清单;(垃圾汽车之家不给下载导出表格,配置页叉掉了车系要出来还要重新刷新,懂不懂用户体验)
每一个车系保存为一个Excel表格,表格命名为“品牌名+车系”。
同品牌的配置表保存到以品牌命名的文件夹中。
【实现效果】
【难点痛点】
1、(跳过这条发疯)真的好难找参考代码!可恶!找到的这个大哥文章还给锁了,痛失两百多,下头csdn你欠我的用什么还!你有本事后面别把我的锁成vip!
2、第一次爬不知道干啥,源代码找不到表内数据,不知道在哪找,参考大哥代码一步步做,发现数据似乎没有被加密,后面在响应里找到JSON格式的api文档,直接获取数据。
3、多数据在表内换行格式的调整,用’\n’链接多行数据,openpyxl 设置表内换行。
【逻辑整理】
1、在产品库中利用左侧品牌列表接口获取所有品牌车系名称和id值
2、解析各个车系的名称和id值,用于构建请求车系配置的url
3、通过响应页找到配置url,根据要找的车系id值构建url,从而得到配置数据
4、调整格式,导出文件
【代码实现】
根据需要安装第三方库,pip install xxx
from random import random
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
from datetime import time
from colorama import Fore
from openpyxl import load_workbook
from openpyxl.styles import Alignment
import re
import requests
import json
import os
import pandas as pd
import openpyxl
观察最左列车型列表
– 步骤1
输入品牌名称,得到该品牌下的所有车系。
def get_band_response(brand_id="0"):
num = 1 # 用于统计请求次数
while True:
headers = {
"user-agent": UserAgent().random # 随机获取ua
}
url = "https://car.autohome.com.cn/AsLeftMenu/As_LeftListNew.ashx"
params = {
"typeId": "1 ",
"brandId": brand_id,
"fctId": "0 ",
"seriesId": "0"
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
return response
else:
if num >= 5:
print("请求超过5次,退出程序")
break
else:
print("请求失败,正在重新请求...")
num += 1
time.sleep(1)
def main():
while True:
band = input("请输入汽车品牌:").strip()
response = get_band_response()
band_pattern = f"<a href=([^>]*?)><i[^>]*?></i>{
band}<em>"
band_info = re.search(band_pattern,