一日一技:在 Puppeteer 中如何拦截并修改网站的 JavaScript 代码
在我的爬虫书中,讲到了使用 Charles 或者 MitmProxy 实现中间人攻击,从而绕过反爬虫机制的方法。但这两种方法都需要安装根证书。
今天,我们来试一试在 Puppeteer 中,使用中间人攻击,攻击目标是我们自己,来绕过反爬虫机制。
在我的爬虫书中,讲到了使用 Charles 或者 MitmProxy 实现中间人攻击,从而绕过反爬虫机制的方法。但这两种方法都需要安装根证书。
今天,我们来试一试在 Puppeteer 中,使用中间人攻击,攻击目标是我们自己,来绕过反爬虫机制。
我们知道,iPhone之间,iPhone和macOS之间是可以一键分享Wi-Fi密码的。只要有一台手机连了Wi-Fi,那么当第二台手机要连Wi-Fi的时候,只要第一台手机在旁边,就会自动弹出一个是否分享Wi-Fi密码的提示,从而一键分享。
我的macOS两年前连过父母家的Wi-Fi。后来又通过它的分享功能让iPhone也连上了Wi-Fi。所以两年过去了,Wi-Fi密码早就忘记了。
现在,我想让一台安卓手机连上这个Wi-Fi应该怎么办呢?
在以前的文章里面,我给大家介绍了使用Python自带的LRU缓存实现带有过期时间的缓存:一日一技:实现有过期时间的LRU缓存。也讲过倒排索引:使用倒排索引极速提高字符串搜索效率。但这些代码对初学者来说比较难,写起来可能会出错。
实际上,这些功能其实都可以使用Redis来实现,而且每个功能只需要1分钟就能做出来。全文搜索功能在搜索英文的时候,甚至可以智能识别拼写错误的问题。
有同学在知识星球和公众号粉丝群里面提到,希望我讲一讲 HTTPS 证书、为什么使用 Charles、Fiddler、MitmProxy 抓 HTTPS 的请求要安装证书、 requests 发送请求的时候,verify 参数除了 False/True 还能填写什么参数。今天我们就这几个问题来做一个简单的介绍。
以前有人说,开源项目非常安全,因为谁都可以看到代码,所以不怕里面藏有后门。
这样的言论显然非常天真,一来,并不会有很多人真的去看源代码;二来,有一些缺陷隐藏得很深,光看源代码看不出来,例如 log4j2;第三,有办法把后门藏在一段非常安全的代码里面,你即使看源代码也看不出哪里有问题。
我们知道,在写爬虫的过程中,如果总是使用同一个 IP,很容易就会被网站识别并封禁,所以需要使用代理 IP 并经常更换。
在昨天的文章一日一技:爬虫模拟浏览器如何避免重复登录?中,我讲到了如何使用Puppeteer接管已经运行的Chrome。今天我们来讲讲使用Selenium如何实现这个功能。
之前有一位爬虫大佬写了一篇文章,说 HTTP/2协议天然就能防大部分的爬虫。Python 无论是 requests 还是 Scrapy 都不支持 HTTP/2协议。
Go + HTTP/2这个网站可以检测你是否使用 HTTP/2协议进行请求。当我们直接使用浏览器访问的时候,页面长这样:
但如果我们直接使用 Scrapy 访问这个页面,并打印源代码,返回的 HTML 长这样:
这样看起来,似乎Scrapy 确实不支持HTTP/2协议?
有同学在知识星球上问我,什么情况下使用静态方法,什么情况下使用类方法。今天我们就来捋一下这两个方法的应用场景。