问题描述
第一篇博文:低手,刚学,求勿喷。
前段时间,使用爬虫访问一个磁力链接下载网站(target_url),收集电影下载链接。一段时间使用同一ip地址连续访问,链接网站会报错,response.status=403 forbidden,显示百度云加速机器人检测balabala。。。浏览器手动填写验证码后,浏览器可正常访问,但是爬虫还是无法爬取,估计是要带上通过检验的Header。各种网站上搜了一圈+自己试了几天,问题依旧在。。哎。。
看哪位大神遇到过类似的问题,麻烦指导一下,谢谢!
解决思路
初学者用笨拙的requests.get各种尝试
- 访问目标磁力下载链接网站
主要在response.body中抓取两个hidden参数s和EventID。我也不知道这两个参数干嘛用的。。就是最后一步提交验证码链接会添加到里面。 - 获取验证码图片和sessionstr
访问url:captcha.su.baidu.com/session_cb/pub=&callback=callback
在response中获取sessionstr
访问url:
captcha.su.baidu.com/image/?session=&pub=377e4907e1a3b419708dbd00df9e8f79
session=后填写上步获得sessionstr
(pub值我这里看是不变的,不知道别人那里怎么样) - 人工识别验证码
testcode=input("验证码:”) - 合成最终验证链接,访问后获取cookie
访问url:http://【】/cdn-cgi/l/chk_captcha?s=&id=&captcha_challenge_field=&manual_captcha_challenge_field=
其中:s等于第一步s,id等于第一步id,captcha_challenge_field等于第二步sessionstr,manual_captcha_challenge_field等于第三步人工识别验证码testcode
特别提示
上述request的时候需要添加浏览器里复制的特定header,其中,Referer填写要爬取的目标地址;合成最终验证链接里面【】也是目标爬取地址。
header={
‘Cookie’: ‘BAIDUID=961EB1A4B665388CE6EA47C30C2E0725:FG=1; BIDUPSID=961EB1A4B665388CE6EA47C30C2E0725; PSTM=1561956798; BDUSS=5mek5LNmlkQXRrUWp-REdadTJCS1lNdXptcFlqSVFyMnVmfnBVR1VDUUxSVUZkSVFBQUFBJCQAAAAAAAAAAAEAAADdZhgDemhvdWNobGN5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu4GV0LuBldan; MCITY=-131%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=1423_21117_29522_29518_28518_29099_29568_28835_29220_26350’,
‘Host’:‘captcha.su.baidu.com’,
‘Referer’: ‘【】’,
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36’
}
实现代码
import requests
import re,os
header={
'Cookie': 'BAIDUID=961EB1A4B665388CE6EA47C30C2E0725:FG=1; BIDUPSID=961EB1A4B665388CE6EA47C30C2E0725; PSTM=1561956798; BDUSS=5mek5LNmlkQXRrUWp-REdadTJCS1lNdXptcFlqSVFyMnVmfnBVR1VDUUxSVUZkSVFBQUFBJCQAAAAAAAAAAAEAAADdZhgDemhvdWNobGN5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu4GV0LuBldan; MCITY=-131%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=1423_21117_29522_29518_28518_29099_29568_28835_29220_26350',
'Host':