车质网爬虫

import requests,re,json,jsonpath,time
from bs4 import BeautifulSoup
import pandas as pd

#投诉编号 投诉品牌 投诉车系 投诉车型 问题简述 典型问题 投诉时间 投诉状态
result=pd.DataFrame(columns=['id','brand','car_modle','type','desc','problem','datatime','status'])

def get_info(request_url):
    headers={
   'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
    html=requests.get(request_url,headers=headers,timeout=10)
    content=html.text
    soup=BeautifulSoup(content,'html.parser')
    temp=soup.find('div',class_='tslb_b')
    #temp里面所有的tr就是汽车投诉那个表
    tr_list=temp.find_all('tr')
    ##投诉编号 投诉品牌 投诉车系 投诉车型 问题简述 典型问题 投诉时间 投诉状态
    df_info=pd.DataFrame(columns=['id','brand','car_modle','type','desc','problem','datatime','status'])
    for tr in tr_list:#再去获取里面的每一行  每一行的8个<td>就是要拿到的内容
        tempMy={
   }#先用个字典 准备存放每一个td里面的内容
        #第一个tr没有td 因为它就是网页中的列索引名称  从第二个tr开始 里面才td 存放的是表格里的内容
        td_list=tr.find_all('td')
        if len(td_list)>0:#如果有td 就去提取里面的内容

            # 各个表格内容分别解构赋值到对应字典
            tempMy['id'],tempMy['brand'],tempMy['car_modle'],tempMy['type'],tempMy['desc'],tempMy['problem'],tempMy['datatime'],tempMy['status']=td_list[0].text,td_list[1].text,td_list[2].text,td_list[3].text,td_list[4].text,td_list[5].text,td_list[6].text,td_list[7].text
            
            #把故障代码替换成明文
            with open('./ctypeinfo.json','r',encoding='utf-8') as f:
                jsondic=json.load(f)
            #故障码正则为字母,数字元组
            codetuple=re.findall(r'(\w)(\d{1,4})',tempMy['problem']) 

            probs=[] #多个故障码则放入此列表
            for code in codetuple: #循环处理每个故障码为明文:字母明文:数字码明文
                abc=code[0] #取出故障码内的字母
                num=code[1] #取出故障码内的数字
                # print(abc,num)
                # 从json文件中解析出故障码字母部分对应的明文
                tar=jsonpath.jsonpath(jsondic,'$[?(@.value=="'+abc+'")].name')[0]
                # print(tar)
                #从json文件中解析出故障码数字部分对应的明文
                tar2=jsonpath.jsonpath(jsondic,'$[?(@.value=="'+abc+'")].items[?(@.id=="'+num+'")].title')[0]
                probs.append(tar+':'+tar2)

            tempMy['problem']=probs #把故障明文列表赋值给
            print(tempMy['problem'])
            #添加到外面那个大的dataframe里面
            df_info=df_info.append(tempMy,ignore_index=True)
    return df_info

url='http://www.12365auto.com/zlts/81-1940-0-0-0-0_0-0-0-0-0-0-0-' #rx5投诉表
for i in range(1,39):
    result=result.append( get_info(url+str(i)+'.shtml') ) 
    time.sleep(1)
result.to_excel("车质网汽车投诉.xlsx",engine='openpyxl',encoding='utf-8-sig',index=False)

json文件可在此网址抓取,记得把id改成字串形式,即加双引号

http://www.12365auto.com/zlts/0-0-0-0-0-0_0-0-0-0-0-0-0-1.shtml
http://www.12365auto.com/js/cTypeInfo.js?version=20211130

var cTypeInfo = [{
   "id":1,"name":"发动机","value":"A","zf":"z","items":[{
   "id":9,"title":"异响"},{
   "id":11,"title":"电子油门延迟"},{
   "id":12,"title":"漏油"},{
   "id":13,"title":"机油乳化"},{
   "id":14,"title":"熄火"},{
   "id":18,"title":"爆震"},{
   "id":24,"title":"抖动"},{
   "id":34,"title":"故障灯亮"},{
   "id":35,"title":"怠速不稳"},{
   "id":37,"title":"漏防冻液"},{
   "id":38,"title":"噪音大"},{
   "id":44,"title":"无法启动"},{
   "id":45,"title":"正时链条及齿轮故障"},{
   "id":53,"title":"喷油嘴故障"},{
   "id":63,"title":"烧机油"},{
   "id":85,"title":"油耗高"},{
   "id":91,"title":"点火线圈故障"},{
   "id":114,"title":"排气故障"},{
   "id":128,"title":"连杆断裂"},{
   "id":129,"title":"曲轴故障"},{
   "id":136,"title":"缸体破损"},{
   "id":137,"title":"喷气嘴故障"},{
   "id":145,"title":"固定螺栓断裂"},{
   "id":160,"title":"无法提速"},{
   "id":163,"title":"功率不足"},{
   "id":173,"title":"火花塞故障"},{
   "id":174,"title":"油门故障"},{
   "id":178,"title":"漏气"},{
   "id":189,"title":"涡轮增压器故障"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值