python 爬虫 汽车之家车辆参数反爬
水平有限,仅供参考。

如图所示,汽车之家的车辆详情里的数据做了反爬对策,数据被CSS伪类替换。

观察 Sources 发现数据就在当前页面。

发现若干条进行CSS替换的js

继续深入此JS

知道了数据与规则,剩下的交给PYTHON。
def repliceStr(browser,textJs,Js):
_config_pos=textJs.find("return '.")
JsSplit=textJs[_config_pos:_config_pos+70]
ClassHead=re.search("[A-Za-z]{2}_[A-Za-z]{2}",JsSplit,re.S).group(0)
ClassFoot=re.search("_[A-Za-z]+';",JsSplit,re.S).group(0)[:-2]
pos=textJs.find("$InsertRule$($index$, $temp$);")
top=textJs[0:pos]
bottom=textJs[pos:]
JsBack = browser.execute_script('''
var suc={};
'''+top+' suc[$index$]=$temp$; '+bottom+'''
return suc
''')
for cj in range(0,len(JsBack)):
cjclass=ClassHead+str(cj)+ClassFoot
Js=re.sub("<span class='"+cjclass+"'></span>",JsBack[str(cj)], Js)
return Js
#获取详情页的数据
def getDetail(base_url):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get(base_url)
#在这里进行文件替换,反爬页面
#keyLink = re.search("var keyLink = (.*?)}];", browser.page_source, re.S)
config = re.search("var config = (.*?)};", browser.page_source, re.S)
option = re.search("var option = (.*?)};", browser.page_source, re.S)
option=option.group(0)[13:-1]
config=config.group(0)[13:-1]
script = re.findall("<script>(.*?)</script>", browser.page_source,re.S)
for i in range(0,len(script)):
if re.search("_config",script[i],re.S) :
config=repliceStr(browser,script[i],config)
if re.search("_option",script[i],re.S) :
option=repliceStr(browser,script[i],option)
option=demjson.decode(option);
config=demjson.decode(config);
carr={}
for item in config['result']['paramtypeitems'] :
bigTitle=item['name']
carr[bigTitle]={}
index=0
for ni in item['paramitems']:
cate =ni['name']
value=ni['valueitems'][0]['value']
carr[bigTitle][index]=[cate,value]
index=index+1
for item in option['result']['configtypeitems'] :
bigTitle=item['name']
carr[bigTitle]={}
index=0
for ni in item['configitems']:
cate =ni['name']
value=ni['valueitems'][0]['value']
carr[bigTitle][index]=[cate,value]
index=index+1
time.sleep(10)
return carr
刚接触PYTHON,还在学习中,找不到更好的解法。
python 爬虫 汽车之家车辆参数反爬的更多相关文章
- python爬虫的一个常见简单js反爬
python爬虫的一个常见简单js反爬 我们在写爬虫是遇到最多的应该就是js反爬了,今天分享一个比较常见的js反爬,这个我已经在多个网站上见到过了. 我把js反爬分为参数由js加密生成和js生成coo ...
- Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
说说这个网站 汽车之家,反爬神一般的存在,字体反爬的鼻祖网站,这个网站的开发团队,一定擅长前端吧,2019年4月19日开始写这篇博客,不保证这个代码可以存活到月底,希望后来爬虫coder,继续和汽车之 ...
- python爬虫——汽车之家数据
相信很多买车的朋友,首先会在网上查资料,对比车型价格等,首选就是"汽车之家",于是,今天我就给大家扒一扒汽车之家的数据: 一.汽车价格: 首先获取的数据是各款汽车名称.价格范围以及 ...
- nodejs爬虫——汽车之家所有车型数据
应用介绍 项目Github地址:https://github.com/iNuanfeng/node-spider/ nodejs爬虫,爬取汽车之家(http://www.autohome.com.cn ...
- python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制
CrawlSpider实现的全站数据的爬取 新建一个工程 cd 工程 创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com 连接提取器Link ...
- Scrapy框架爬虫初探——中关村在线手机参数数据爬取
关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...
- Python爬虫:用BeautifulSoup进行NBA数据爬取
爬虫主要就是要过滤掉网页中没用的信息.抓取网页中实用的信息 一般的爬虫架构为: 在python爬虫之前先要对网页的结构知识有一定的了解.如网页的标签,网页的语言等知识,推荐去W3School: W3s ...
- Python爬虫入门教程 2-100 妹子图网站爬取
妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...
- python爬虫实战(六)--------新浪微博(爬取微博帐号所发内容,不爬取历史内容)
相关代码已经修改调试成功----2017-4-13 详情代码请移步我的github:https://github.com/pujinxiao/sina_spider 一.说明 1.目标网址:新浪微博 ...
随机推荐
- [Luogu P4147] 玉蟾宫 (网格DP)
题面 传送门:https://www.luogu.org/problemnew/show/P4147 Solution 裸的求极大子矩阵 感谢wzj dalao的教学 首先,有一个很显然但很重要的结论 ...
- adb、package及activity
1. adb adb连接手机参考:https://www.cnblogs.com/mind18/p/12592252.html,中的三.5节 1.1. adb介绍 ADB全名Andorid De ...
- leetcode114:valid-sudoku
题目描述 根据数独的规则Sudoku Puzzles - The Rules.判断给出的局面是不是一个符合规则的数独局面 数独盘面可以被部分填写,空的位置用字符'.'.表示 这是一个部分填写的符合规则 ...
- dedecms织梦手机端文章内容页图片不能自适应解决方法
dedecms织梦手机端文章内容页图片不能自适应解决方法: 方法一修改手机端文章页模板代码: 找到并打开手机端的文章内容页模板,将里面的{dede:field.body/}标签修改一下,改为如下的标签 ...
- idea开发工具下,进行多个线程切换调试
- oracle的三种连接方式
1.通过sid jdbc:oracle:thin:@host:port:SID Example: jdbc:oracle:thin:@localhost:1521:sid_test 2.通过servi ...
- 08 . Vue脚手架安装,使用,自定义配置和Element-UI导入使用
Vue脚手架 Vue脚手架可以快速生成Vue项目基础的架构. 安装3.x版本的Vue脚手架 /* npm install -g @vue/cli@3.3 */ 基于3.3版本的脚手架命令创建Vue项目 ...
- [LeetCode题解]21. 合并两个有序链表 | 递归
解题思路 使用递归实现: 定义函数功能:合并两个有序链表,并返回链表的头 结束条件:两个链表其中一个为空,返回另一个链表 递推公式: l1.val < l2.val:l1.next = Merg ...
- WinRM服务远程命令执行
WinRM服务简介 WinRM是WindowsRemoteManagementd(win远程管理)的简称.基于Web服务管理(WS-Management)标准,使用80端口或者443端口.这样一来,我 ...
- 运维自动化之1 - ansible 批量主机管理
2000 - 2016 年,维护的小型机.linux刚开始的2台增加到上千台,手工检查.日常版本升级需要管理太多设备,必须通过运维自动化实现 特别是版本升级,需要到同类机器部署代码.起停设备,必须在一 ...