嘿哈,本人呢也很喜欢车,只不过买不起,哈哈哈 穷人一个 我呢就经常去汽车之家看一看我喜欢的那些车,看看配置啥的,有一天我就想吧这些数据都爬下来(手痒痒了啥都想爬一下,哈哈)
就开始了我的掉头发之旅

  1. 确定要爬的网页
    奔驰s级参数配置表

    汽车之家很是很良心的 ,给你做了很详细的配置对比
  2. 查看数据加密方式
  3. css加密(仅限本网站)其实不是css文件搞得鬼,是一段js,首先找到js数据
  4. 用正则吧数据取出来(不止一段js)
js_list = re.findall('(\(function\([a-zA-Z]{2}.*?_\).*?\(document\);)', ret)

然后和一段js代码(运行上面获取到的js数据)拼接,写入到HTML文件里面去,

DOM = ("var rules = '2';""var document = {};""function getRules(){return rules}""document.createElement = function() {""      return {""              sheet: {""                      insertRule: function(rule, i) {""                              if (rules.length == 0) {""                                      rules = rule;""                              } else {""                                      rules = rules + '#' + rule;""                              }""                      }""              }""      }""};""document.querySelectorAll = function() {""      return {};""};""document.head = {};""document.head.appendChild = function() {};""var window = {};""window.decodeURIComponent = decodeURIComponent;")

再用selenium吧对应关系读出来


for js in js_list:DOM = DOM + js
html_type = "<html><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><head></head><body>    <script type='text/javascript'>"
js = html_type + DOM + " document.write(rules)</script></body></html>"  # 待执行的JS字符串with open("js.html", "w", encoding="utf-8") as f:f.write(js)
browser = webdriver.Chrome(executable_path=r"G:\爬虫项目\b站登陆\chromedriver.exe")
browser.get("file://G:/爬虫项目/汽车之家汽车参数配置数据字体反爬/js.html")
true_text = browser.find_element_by_tag_name('body').text
browser.close()
ans= re.findall('#\.(.*?)::before { content:"(.*?)" }',true_text)
font_dict = {}
for k,v in ans:font_dict[k]=v
with open('font.txt','w',encoding='utf8') as f:json.dump(font_dict,f)

然后就得到了标签class属性值和汉字的对应关系
5. 查找未加密的数据来源

网页中看不全,吧网页保存到本地进行查看

用正则获取出来

config = re.findall('config = (.*?);', ret)option = re.findall('option = (.*?)};', ret)bag = re.findall('bag = (.*?)};', ret)

然后根据第四部获取到的对应关系进行替换
6. 写入表格

代码如下(这个代码有点乱,但是根据思路写的(那个DOM说实话我也不知道怎么来的 那一段是借鉴了某大神的 其他的是我自己写的))不懂得加我wx:18300485357一起学习进步

import json
import csv
import requests
import re
from lxml import etree
from selenium import webdriver# headers = {# 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36'
# }
#
# url = 'https://car.autohome.com.cn/config/series/59.html#pvareaid=3454437'
# ret = requests.get(url=url,headers=headers).text
# with open('qi_data.html','w',encoding='utf8') as f:
#     f.write(ret)with open('qi_data.html', 'r', encoding='utf8') as f:ret = f.read()
# keyLink = re.findall('keyLink = (.*?);',ret)
#
config = re.findall('config = (.*?);', ret)option = re.findall('option = (.*?)};', ret)bag = re.findall('bag = (.*?)};', ret)js_list = re.findall('(\(function\([a-zA-Z]{2}.*?_\).*?\(document\);)', ret)# 运行JS的DOMDOM = ("var rules = '2';""var document = {};""function getRules(){return rules}""document.createElement = function() {""      return {""              sheet: {""                      insertRule: function(rule, i) {""                              if (rules.length == 0) {""                                      rules = rule;""                              } else {""                                      rules = rules + '#' + rule;""                              }""                      }""              }""      }""};""document.querySelectorAll = function() {""      return {};""};""document.head = {};""document.head.appendChild = function() {};""var window = {};""window.decodeURIComponent = decodeURIComponent;")
# for js in js_list:
#        DOM = DOM + js
# html_type = "<html><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><head></head><body>    <script type='text/javascript'>"
# js = html_type + DOM + " document.write(rules)</script></body></html>"  # 待执行的JS字符串
#
# with open("js.html", "w", encoding="utf-8") as f:
#     f.write(js)
# browser = webdriver.Chrome(executable_path=r"G:\爬虫项目\b站登陆\chromedriver.exe")
# browser.get("file://G:/爬虫项目/汽车之家汽车参数配置数据字体反爬/js.html")
# true_text = browser.find_element_by_tag_name('body').text
# browser.close()
# ans= re.findall('#\.(.*?)::before { content:"(.*?)" }',true_text)
# font_dict = {}
# for k,v in ans:
#        font_dict[k]=v
# with open('font.txt','w',encoding='utf8') as f:
#        json.dump(font_dict,f)with open('font.txt', 'r', encoding='utf8') as f:ans = json.load(f)
print(ans)
# '"<span class='" + info.group(1) + "'></span>"'
#
data_list = []
str_config = str(config[0])
for k in ans:str_config = str_config.replace(r"<span class='" + k + r"'></span>", ans[k])
data_list.append(json.loads(str_config))str_option = str(option[0])
for k in ans:str_option = str_option.replace(r"<span class='" + k + r"'></span>", ans[k])data_list.append(json.loads(str_option + "}"))print(data_list)
str_bag = str(bag[0])
for k in ans:str_bag = str_bag.replace(r"<span class='" + k + r"'></span>", ans[k])data_list.append(json.loads(str_bag + "}"))configItem = data_list[0]['result']['paramtypeitems']
optionItem = data_list[1]['result']['configtypeitems']
bagItem = data_list[2]['result']['bagtypeitems'][0]['bagitems']car_item = {}
for typ in configItem:for car in typ['paramitems']:car_item[car['name']] = []for value in car['valueitems']:k = value['value']if k == '':try:k = ''for i in value['sublist']:k += ' ' + i['subname']except:k = value['value']car_item[car['name']].append(k)for typ in optionItem:for car in typ['configitems']:car_item[car['name']] = []for value in car['valueitems']:k = value['value']if k == '':try:k = ''for i in value['sublist']:k += ' ' + i['subname']except:k = value['value']car_item[car['name']].append(k)for car in bagItem[0]['valueitems']:car_item[car['name']] = []car_item[car['name']].append(car['bagid'])car_item[car['name']].append(car['pricedesc'])car_item[car['name']].append(car['description'])
print(car_item)# 1. 创建文件对象
f = open('汽车参数.csv', 'w', encoding='utf-8', newline='')# 2. 基于文件对象构建 csv写入对象
csv_writer = csv.writer(f)li = [i for i in car_item]
# 3. 构建列表头
csv_writer.writerow(li)
# 4. 写入csv文件内容
for i in range(len(car_item['车型名称'])):lis = []for k in li:lis.append(car_item[k][i].replace('&nbsp;', ''))csv_writer.writerow(lis)# 5. 关闭文件
f.close()

汽车之家汽车详细参数之css反爬相关推荐

  1. python爬虫笔记五:汽车之家贴吧信息(字体反爬-动态映射)

    学习网址: https://jia666666.blog.csdn.net/article/details/108974149 ----------------------------------- ...

  2. python爬虫进阶-汽车之家贴吧信息(字体反爬-动态映射)

    目的 获取汽车之家贴吧的内容信息 详细需求 汽车之家贴吧 思路解析 一.F12获取目标信息-进行分析 二.字体反爬解析-根据上一篇的文章,直接搜索关键词就好 三 根据其后的链接,保存为ttf在本地,查 ...

  3. python+mitmdump爬取汽车之家汽车信息

    一,准备工作 (一)安装mitmproxy 1,通过 pip install mitmproxy 安装 2,通过安装包安装 网址:https://github.com/mitmproxy/mitmpr ...

  4. 抓取设了CSS反爬机制的大众点评数据(下)

    该篇实现大众点评爬虫操作代码,所有原理都在(上)篇均已详细阐述,让我没想到的是大众点评不仅设置了CSS反爬,在ip限制方面也是十分的凶狠,不得已花了10块钱买了一天代理ip. 大众点评究的反爬竟有多恶 ...

  5. python爬虫进阶-自如租房信息(CSS反爬)

    目的 分析学习CSS反爬并得到正确的信息 详细需求 http://sz.ziroom.com/z/ 思路解析 一.F12 二.分析 三.复制url,浏览器打开查看 四.映射字符 五.汇总 1.源网页请 ...

  6. Glidedsky系列—爬虫CSS反爬

    前言 题目网址为:http://glidedsky.com/level/web/crawler-css-puzzle-1 提示:以下是本篇文章正文内容,下面案例可供参考 一.题目描述 二.题目分析 1 ...

  7. tesseract破解css反爬抓取自如租房信息

    引言 作为一个刚毕业两年的打工人,在深圳这种房价压死人的城市,买房是不可能买房了,只能寄希望于租到一个便宜又舒适的房子.今天给大家带来的案例是tesseract破解css反爬抓取自如租房信息,将好房源 ...

  8. php汽车之家数据api,2018汽车之家汽车品牌车型数据新鲜出炉

    [实例简介] 项目需要,用python刚爬的汽车之家的汽车品牌.车型数据内含品牌logo以及车型图片. [实例截图] [核心代码] 9085a56e-b1de-45ac-b3aa-3f126e6468 ...

  9. 汽车之家汽车品牌Logo信息抓取 DotnetSpider实战[三]

    一.正题前的唠叨 第一篇实战博客,阅读量1000+,第二篇,阅读量200+,两篇文章相差近5倍,这个差异真的令我很费劲,截止今天,我一直在思考为什么会有这么大的差距,是因为干货变少了,还是什么原因,一 ...

  10. python网络爬虫汽车之家汽车高清图片

    今天的目的是爬虫汽车之家某款汽车的外观高清图片 所选汽车:红旗H9 爬取页面的网址:红旗H9外观图片 最终效果图: 首先我们需要安装一下需要的库: pip install requests pip3 ...

最新文章

  1. 可持久化线段树(主席树)【舰娘系列】【自编题】
  2. linux挂载分区失败,Ubuntu分区挂载错误与Grub引导错误的修复
  3. MySQL如何选择数据类型
  4. 心辽阔了,人生才能辽阔
  5. 会计的疑惑--BigDecimal的秘密
  6. 当c语言老师遇到网络崩溃,网络教学搞不定?工科教授来支招!
  7. svn .a文件上传不了
  8. pip安装第三方库报错Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None))
  9. ReactWebpack 环境安装
  10. 0 最优化问题数学概念补充
  11. 多组测试数据01字典树「模板」
  12. 怎么制作GIF图片并添加文字
  13. cisco交换机配置方法
  14. 学校邮箱的pop服务器地,澳门大学的邮件服务器(POP)是多少
  15. 数据库DDL与DML指的什么?
  16. 浅谈什么是web应用防火墙(WAF)
  17. Ubuntu (双系统)外接显示器无显示/无反映
  18. 副业兼职: 在家就可以做的兼职项目推荐
  19. android 4.0 app2sd,安卓手机开启App2sd必看教程
  20. 在上海创业的日子-给客户开出第一张发票

热门文章

  1. android外设按键,Android 外接键盘的按键处理
  2. 自注意力 self-attention 笔记
  3. 网络传输大文件使用什么软件可以高速传输?
  4. Android编程获取图片和视频缩略图的方法(图片压缩)
  5. electron 读取文件夹内容_读写本地文件
  6. 张尧学等人获奖,理由不充分
  7. 前端面试常问的问题(必须掌握)
  8. 如何在matlab中设置colorbar
  9. Android 修改屏幕亮度
  10. 计算机与信息科学相关教材,AdobeIllustrator实例教程/计算机与信息科学系列规划教材...