HTTPS 证书和中间人攻击的原理
有同学在知识星球和公众号粉丝群里面提到,希望我讲一讲 HTTPS 证书、为什么使用 Charles、Fiddler、MitmProxy 抓 HTTPS 的请求要安装证书、 requests 发送请求的时候,verify 参数除了 False/True 还能填写什么参数。今天我们就这几个问题来做一个简单的介绍。
有同学在知识星球和公众号粉丝群里面提到,希望我讲一讲 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协议?
有同学在知识星球上问我,什么情况下使用静态方法,什么情况下使用类方法。今天我们就来捋一下这两个方法的应用场景。
GNE 是一个通用的新闻正文抽取器,自从开源以来,已经被很多人用来作为新闻正文通用爬虫的重要组件。
GNE 的 Github 地址:https://github.com/GeneralNewsExtractor/GeneralNewsExtractor。算法来自于《基于文本及符号密度的网页正文提取方法》,这个算法是完全基于 HTML 里面的信息来寻找正文。因此,它有一些先天性缺陷:
但如果让人来看网页,就不会搞错。因为正文的位置和评论的位置肯定不一样,版权信息一般在最下面……这些可视化信号,是通过 CSS 来确定的,单纯从 HTML 中是看不到的。
GNE 输入的HTML,原本就是使用模拟浏览器输出的 HTML,并不是真正的网页源代码。既然如此,在使用模拟浏览器的时候,为什么不直接把每个节点的坐标信息都记录下来呢?在使用模拟浏览器的时候,只需要执行一段 JavaScript 代码,就可以把每个节点是否可见,每个可见节点的长宽高、左上角、右下角的坐标记录下来。这样,GNE 在解析正文的时候,可以参考这些信息,直接移除不可见的节点,并移除尺寸显然不合理、位置显然不正确的节点。从而大大提高正文识别的准确率。
什么是隧道代理?我们来看下面这张截图:
所谓隧道代理,就是一个能帮你自动更换代理 IP 的代理服务。在你的代码里面,你只需要把一个入口代理地址写死,然后正常发起请求,而目标服务器接收到的请求,每一次都是不同的代理地址。
在某代理网站上,隧道代理50并发每秒的价格是4000元/月:
而常规的,先请求接口拿到一批代理 IP,再选一个发起请求的原始代理服务器,一个月价格才600多元:
所以,如果我们能自己做一个隧道代理,将会省下很多钱!
大家有时候可能需要在 Linux 上面生成 zip 文件或者对一个 zip 文件进行解压。如果你在网上搜索怎么在 Linux 解压 zip 文件,你一般会看到下面这样的回答:
但如果你手边刚好有一台 Linux 服务器的话,你可以试一试,一般你会得到这样的返回: