反爬相关小知识

防盗链

Request Header中,有Referer 参数,这个参数可以理解为在哪个网页中访问的此url。一般可被限制为仅在某个域名下的网页中访问这个请求时才会返回正确的信息。

requests 请求时,在 headers 中添加这个参数的正确值即可。

headers = {'Referer': 'xxxxxxx'}
r = requests.get('http://www.xxxx.com', headers=headers)

返回的资源链接无效

我们在爬图片、视频、音频等资源时,会先得到资源链接再进行下载操作。如果同一个页面的资源,在浏览器中单独访问没问题,但是通过爬虫得到的同一资源链接却无法访问,是无效链接。

那么这种情况,一般是接口返回的资源链接本身就是错误的,网站通过js将资源链接修正后进行使用。可以通过对比二者的资源链接,然后通过不同之处再寻找出网站是如何将资源链接修正的。我们使用同样的方式进行修正即可。

此方法无特定解决方式,只能多找多看。

请求的实际处理过程

在浏览器的开发者工具中,请求的内页中有 headersPreviewResponseInitiator等等。其中Initiator是浏览器发送此请求时和接收到数据后,通过js处理的全过程,由下至上执行。

点击其中的某一个js,会跳到Sources项。其中高亮的行就是对应执行的代码。Sources中,进行断点操作后,右侧有 Call Stacklocal 分别表示溯源和数据,通过一点点分析可得到结果(需要耐心分析)。

解压加密js

一般情况下,浏览器收到的js文件都是经过压缩成一行并且变量名被替换成字母的内容。可以通过开发者工具中 Sources项,点击其中的一个js,找到左下角的 {}按钮,就会将压缩成一行的代码进行格式化处理。