文档章节

python3 爬取汽车之家所有车型操作步骤

SEOwhywhy
 SEOwhywhy
发布于 2018/11/24 11:25
字数 1107
阅读 39
收藏 0

题记:

  互联网上关于使用python3去爬取汽车之家的汽车数据(主要是汽车基本参数,配置参数,颜色参数,内饰参数)的教程已经非常多了,但大体的方案分两种:

  1.解析出汽车之家某个车型的网页,然后正则表达式匹配出混淆后的数据对象与混淆后的js,并对混淆后的js使用pyv8进行解析返回正常字符,然后通过字符与数据对象进行匹配,具体方法见这位园友,传送门:https://www.cnblogs.com/my8100/p/js_qichezhijia.html (感谢这位大神前半部分的思路)

       2.解析出汽车之家某个车型的网页,然后正则表达式匹配出混淆后的数据对象与混淆后的js,针对混淆后的js进行进行手动匹配,因为混淆的js大概分为8大类(无参数 返回常量,无参数 返回函数,参数等于返回值函数,无参数 返回常量,无参数 返回常量中间无混淆代码,字符串拼接时使无参常量,字符串拼接时使用返回参数的函数),然后通过正则表达式进行解析出8类内容并进行逐个替换,最终也会返回一个带有顺序的字符串,将这个字符串与前边的数据对象再次替换,最终数据对象中的所有span都会被替换成中文,具体操作见园友的地址,传送门:https://www.cnblogs.com/dyfblog/p/6753251.html (感谢这位大神前半部分的思路)

不过鉴于作者技术有限,上述的两种方案,我都没有完整的执行完成,哪怕花了一周的时间也没有,但是没有办法,谁让我是一个很爱钻牛角尖的人呢,下一步提出我自己琢磨出来的方案,流程上稍微有点复杂,但是稳打稳扎,还是可以爬出来的,好了话不多说了,贴出步骤;

1.获取所有车型的网页,保存到本地: 

复制代码
 1 import bs4
 2 import requests as req
 3 '''
 4 第一步,下载出所有车型的网页。
 5 '''
 6 def mainMethod():
 7     '''
 8     解析汽车之家所有车型数据保存到D盘
 9     '''
10     li = [chr(i) for i in range(ord("A"),ord("Z")+1)]
11     firstSite="https://www.autohome.com.cn/grade/carhtml/"
12     firstSiteSurfixe=".html"
13     secondSite = "https://car.autohome.com.cn/config/series/"
14     secondSiteSurfixe = ".html"
15 
16     for a in li:
17         if a is not None:
18             requestUrl = firstSite+a+firstSiteSurfixe
19             print(requestUrl)
20             #开始获取每个品牌的车型
21             resp = req.get(requestUrl)
22             # print(str(resp.content,"gbk"))
23             bs = bs4.BeautifulSoup(str(resp.content,"gbk"),"html.parser")
24             bss = bs.find_all("li")
25             con = 0
26             for b in bss:
27                 d = b.h4
28                 if d is not None:
29                     her = str(d.a.attrs['href'])
30                     her = her.split("#")[0]
31                     her = her[her.index(".cn")+3:].replace("/",'')
32                     if her is not None:
33                         secSite = secondSite +her + secondSiteSurfixe
34                         print("secSite="+secSite)
35                         # print(secSite)
36                         #奥迪A3
37                         if her is not None:
38                             resp = req.get(secSite)
39                             text = str(resp.content,encoding="utf-8")
40                             print(a)
41                             fil = open("d:\\autoHome\\html\\"+str(her),"a",encoding="utf-8")
42                             fil.write(text)
43                     con = (con+1)
44             else:
45                 print(con)
46 if __name__ =="__main__":
47     mainMethod()
复制代码
2.解析出每个车型的关键js并拼装成一个html,保存到本地。

复制代码
 1 import os
 2 import re
 3 '''
 4 第二步,解析出每个车型的关键js拼装成一个html
 5 '''
 6 if __name__=="__main__":
 7     print("Start...")
 8     rootPath = "D:\\autoHome\\html\\"
 9     files = os.listdir(rootPath)
10     for file in files:
11         print("fileName=="+file.title())
12         text = ""
13         for fi in open(rootPath+file,'r',encoding="utf-8"):
14             text = text+fi
15         else:
16             print("fileName=="+file.title())
17         #解析数据的json
18         alljs = ("var rules = '2';"
19                  "var document = {};"
20                  "function getRules(){return rules}"
21                  "document.createElement = function() {"
22                  "      return {"
23                  "              sheet: {"
24                  "                      insertRule: function(rule, i) {"
25                  "                              if (rules.length == 0) {"
26                  "                                      rules = rule;"
27                  "                              } else {"
28                  "                                      rules = rules + '#' + rules;"
29                  "                              }"
30                  "                      }"
31                  "              }"
32                  "      }"
33                  "};"
34                 
37                  "document.head = {};"
38                  "document.head.appendChild = function() {};"
39 
40                  "var window = {};"
41                  "window.decodeURIComponent = decodeURIComponent;")
42         try:
43             js = re.findall('(\(function\([a-zA-Z]{2}.*?_\).*?\(document\);)', text)
44             for item in js:
45                 alljs = alljs + item
46         except Exception as e:
47             print('makejs function exception')
48 
49 
50         newHtml = "<html><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><head></head><body>    <script type='text/javascript'>"
51         alljs = newHtml + alljs+" document.write(rules)</script></body></html>

© 著作权归作者所有

SEOwhywhy
粉丝 8
博文 155
码字总数 342404
作品 0
私信 提问
【scrapy】爬取汽车车型数据

汽车 最近想在工作相关的项目上做技术改进,需要全而准的车型数据,寻寻觅觅而不得,所以就只能自己动手丰衣足食,到网上获(窃)得(取)数据了。 汽车之家是大家公认的数据做的比较好的汽车...

littlelory
2017/07/13
0
0
Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二

说说这个网站 汽车之家,反爬神一般的存在,字体反爬的鼻祖网站,这个网站的开发团队,一定擅长前端吧,2019年4月19日开始写这篇博客,不保证这个代码可以存活到月底,希望后来爬虫coder,继...

梦想橡皮擦
04/28
0
0
如何去除网页噪声提取数据(02) —— 汽车之家(字体反爬)

如何去除网页噪声提取数据(02) —— 汽车之家(字体反爬) 1. 需求介绍 继去哪儿网之后,我又盯上了汽车之家这个网站,这个网站的反爬策略挺有意思的,采用了时下最流行的字体反爬技术,让...

zwq912318834
2018/05/14
0
0
python3 scrapy 爬虫实战之爬取站长之家

爬取目标 站长之家:http://top.chinaz.com/all/ 爬取工具 win10 python3 scrapy BeautifulSoup 爬取内容 1 网站缩略图 2 网站名称 3 网址 4 Alexa排名,5 百度权重 6 网站简介 7 网站得分 ...

徐代龙
2018/05/23
0
0
没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)

由于最新的视频整顿风波,内涵段子APP被迫关闭,广大段友无家可归,但是最近发现了一个“段友”的app,版本更新也挺快,正在号召广大段友回家,如下图,有兴趣的可以下载看看(ps:我不是打广...

p柯西
2018/06/05
37
0

没有更多内容

加载失败,请刷新页面

加载更多

Java中垃圾回收的方法有哪些?

引数计数法 应用于:微软的COM/ActionScrip3/Python等 对象没有被引用就会被回收,缺点是需要维护一个引用计算器 复制算法 年轻代中使用的Minor GC。 a.效率高,缺点:需要内存容量大,比较耗...

DustinChan
38分钟前
4
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
40分钟前
6
0
初识Java

Java语言的优势: 1、跨平台(所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。主要是由jvm所决定) 2.、面向对象(用老师的一句话“一切皆对象”后面会用详细...

Carina_猪
昨天
5
0
Java描述设计模式(09):装饰模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景 1、场景描述 孙悟空有七十二般变化,他的每一种变化都给他带来一种附加的本领。他变成鱼儿时,就可以到水里游泳;他变成鸟儿时,就...

知了一笑
昨天
4
0
聊聊nacos的HttpHealthCheckProcessor

序 本文主要研究一下nacos的HttpHealthCheckProcessor HealthCheckProcessor nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckProcessor.java public in......

go4it
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部