这次练习获取的网站使用了许多反爬技术:

1.html页面使用了css字体偏移

2.xhr加载有webdriver反爬检测

3.请求接口使用了多项加密参数以及cookie验证

4.部分js代码用了ob混淆

一开始只是想学习练手一下css偏移学习后是解决了,但想获取页面源代码时候遇到了重重问题。

爬取测试思路:

request请求无数据内容,说明数据是异步请求得来,查看xhr找到了请求的api,查看试图逆向参数发现稍有难度,参数比较多,接着试图换一个思路,用selenium访问获取页面源代码,接着驱动访问发现显示不出内容,并要求登录,然后解决cookies:解决登录获取cookies.载入cookies后发现依旧是不现实数据,经过检查发现有个js文件监测webdriver访问,所以要将selenium伪装。最后成功加载出内容。接着获取页面源代码看看,结果又再次发现新问题!!!页面获取后发现是经过ob混淆的页面源代码,处理起来难度又更高了(最后总结发现并非全部混淆只是哈有ob混淆的代码就以为运用上了),最后几经思考了解到利用日志定位到页面加载的数据从而获取加载过了什么数据,等于抓包软件抓取的原理。经过测试终于成功获得api返回的数据。

(虽然后面发现可以定位页面获取想要的数据并没有ob混淆只是部分运用了,但获取请求的返回更高效不需要翻页请求一次获取全部内容,并且摸索学会了新的爬取技术)

下面记录一下本次学习到的获取方法:

先记录一下学习过程遇到的问题:

1.为获取performance日志添加项的报错

因为pip下载是最新版本的selenium所以option.add_experimental_option('w3c',False),会报错因为4.3版本后w3c默认了不允许设置False。降版本到3.141.0即可解决。

2.定位标签点击却报错字典类型无法使用click(),解决方法也是降低版本解决。

需要添加一些项才能使用driver.get_log('performance')获取日志,具体原理因为我也不是很了解浏览器设计原理所以没有深究

caps = DesiredCapabilities.CHROME
caps['loggingPrefs'] = {'browser':'ALL','performance':'ALL',
}
caps['perfLoggingPrefs'] = {'enableNetwork' : True,'enablePage' : False,'enableTimeline' : False}
option = webdriver.ChromeOptions()
option.add_experimental_option('perfLoggingPrefs',{'enableNetwork':True,'enablePage':False,
})
driver = webdriver.Chrome(options=option,desired_capabilities=caps)

伪装浏览器的基础上再加上上面内容才能获取日志

接着获取到日志后,循坏查找里面允许了api的那一条获取他的requestid再通过id定位到加载的数据:

具体代码如下:

def get_xhr(driver,url1):driver.get(url1)    #访问地址time.sleep(2)       #给予时间载入日志try:request_log = driver.get_log('performance') #获取日志# print(request_log)print(len(request_log)) #查看数据数量for i in range(len(request_log)):       #通过循环获取request中的urlmessage = json.loads(request_log[i]['message'])message = message['message']['params']# .get() 方式获取是了避免字段不存在时报错request = message.get('request')    if (request is None):continue#url = request.get('url')if (url == "https://flight.qunar.com/touch/api/domestic/wbdflightlist"): # 定位得到requestIdrequestid = message['requestId']print(requestid)# 通过requestId获取接口内容content = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': requestid})print(content)breakexcept:# 因为selenium原因载入cookie维持登录状态需要刷新,而刷新会影响工作日志,导致获取不到这时递归再次获取一次即可get_xhr(driver,url1)    

运行代码:

成功获取到数据,因为此网站的数据是直接返回所有当天的所有机票数据,所以更方便不需要跳转页面来获取,只需要对数据进行提取即可!

selenium网络爬虫去哪儿机票利用performance获取日志截获加载的xhr,ajax,js等数据相关推荐

  1. (学习笔记)Python3网络爬虫(三):漫画下载,动态加载、反爬虫这都不叫事!

    昨天看到了这篇文章,大有收获,通过查阅资料等方式,自己给代码添加了更多的注释,解释了其中一些函数的使用. 原文链接:https://jackcui.blog.csdn.net/article/deta ...

  2. 利用Navigation Timing测量页面加载时间

    最近在看一本名为<web性能实践日志>的书籍,其中第十三章"网络计时"中介绍了一种比较新的计算页面各部分加载时间方法,这也是W3C Web性能工作小组正在做的事情,接下 ...

  3. php 遍历所有网站网址,使用selenium获取网址所加载所有资源url列表信息

    抓取数据时,经常遇到有的数据是通过ajax异步调取的,如何通过selenium获取网址所加载的全部请求url地址了,即我们打开开发者工具里面network中记录的请求url列表,可以参考下面代码 #  ...

  4. 爬虫第三弹——利用EditThisCookie获取cookie跳过登陆验证(医脉通)

    爬虫第一弹:利用Scrapy爬取1905电影网 爬虫第二弹:深网爬虫指南,AcFun评论爬取教程 前言 最近有个活,需要将约300个英文医学名词翻译成中文. 经过一番查找发现医脉通的词典还不错,但是必 ...

  5. 数据抓包(网络爬虫)-正方教务管理系统登录后获取自己的课程表

    上次发的博客是:数据抓包(网络爬虫)-正方教务管理系统登录 好的,今天我们来抓自己的课程表数据,说实话,都会模拟登录了,抓个课程表的什么就不再话下了. 直接来步骤: 1.首先还是监视浏览器中得到自己课 ...

  6. 利用 Arthas 解决启动 StandbyNameNode 加载 EditLog 慢的问题

    作者 | yhf20071 [Arthas 官方社区正在举行征文活动,参加即有奖品拿~点击投稿] 公司新搭 HDFS 集群,namenode做ha,但是在启动 StandbyNamenode 节点的时 ...

  7. Scrapy + Selenium 实现模拟登录,获取页面动态加载数据

    本文是模拟登录某八同城招聘网站,然后获取一个招聘信息页面中的浏览人数. 直接上代码! 1. Scrapy 爬虫文件 import scrapyclass TestSpider(scrapy.Spide ...

  8. 利用classloader同一个项目中加载另一个同名的类_线程上下文类加载器ContextClassLoader内存泄漏隐患...

    前提 今天(2020-01-18)在编写Netty相关代码的时候,从Netty源码中的ThreadDeathWatcher和GlobalEventExecutor追溯到两个和线程上下文类加载器Cont ...

  9. Android之利用回调函数onCreateDialog实现加载对话框

    效果图: 有时候我们需要去做一个Activity启动时的数据加载对话框,关于对话框的各种实现可以通过一起学android之对话框 Dialog的创建(7)来完成,在这里另外介绍一个,利用onCreat ...

最新文章

  1. 男人最不该做的7件事
  2. 2018机器阅读理解竞赛冠军分享:问答系统新思路
  3. JetBrains 宣布:IntelliJ 平台彻底停用 Log4j 组件,建议切换至 java.util.logging
  4. 无密码进去mysql_技术分享 | 安全地无密码登录 MySQL
  5. BZOJ 1821 [JSOI2010] Group 部落划分 Group
  6. 又肝了下微服务 API 网关“金刚”,也是蛮香的~
  7. 第五章数理统计--样本和抽样分布
  8. STL源码剖析 Stack栈 queue队列
  9. php数组转ini文件,php – 将数组转换为.ini文件
  10. Hadoop学习之hdfs集群搭建详解
  11. Java开发十二大框架
  12. 房屋租赁管理系统(Java源码+论文)
  13. ASP.NET在线考试系统+文档说明
  14. django读取mysql事实数据_Django读取Mysql数据并显示在前端的实例
  15. yolov5 deepsort 行人车辆 双向计数 跟踪检测 | 开源项目分享
  16. [科幻]Java版三体中黑暗森林法则的猜想
  17. 计算机显示器外壳怎么防水,电脑显示器怎么拆开外壳
  18. 数据库多对多关系建表
  19. TP5集成支付宝h5支付接口
  20. [Zookeeper-3.6.2源码解析系列]-14-Zookeeper使用到的Reactor网络模型原理分析

热门文章

  1. 应聘上海辉颐系统集成量化研究员需要什么条件?
  2. vba中MsgBox的参数及用法
  3. 多传感器融合定位(二)——基于地图的定位
  4. 【第五章 | 存储器管理】《操作系统 慕课版》课后答案 + 复习
  5. APP被苹果App Store拒绝的N个原因
  6. canvas 线条渐变追逐_canvas之渐变
  7. 办公软件——隐私条款
  8. 如何参与linux内核开发
  9. android listview 缓存,探究Android ListView 的缓存机制
  10. 计算机安全技术相关实例,计算机安全技术TOOLS教程课件5.14 实例:无线网络安全配置.doc...