本地 python requests 直接抓这个网址的内容是 ok 的, 我从快代理上买了代理再用 requests 抓就不行, 但是我用 selenium 加上代理是可以看到这个网页的, 于是我先用 selenium 加代理打开网页, 然后把 requests headers(包括 cookies) 复制出来(就是从开发者模式复制出来), 再用 request 还是不行, requests 抓到的页面需要验证, 但是如果不使用代理, 直接用我本机的 ip, requests 使用 selenium + 代理 获取到的 requests header 使用 也是成功的。 请问这样的问题应该如何解决, 为什么 selenium 没有被禁, 但是 request 使用同样的 headers + 代理就不行, 除了 request header 里面的信息, 服务器是什么逻辑判断我的 request 是爬虫的
1
ooh 2020-07-28 12:12:25 +08:00
代理 IP 直接被识别成代理 IP 去了?
|
2
zh1997 2020-07-28 12:25:14 +08:00 via iPhone
通过代理抓取的内容 和状态码是什么
|
3
gluttony 2020-07-28 14:04:25 +08:00
cookies 或 LocalStorage 里有些值是通过 JavaScript 算的。你用 request 库不支持 eval js,请求时没有带上这些值就被判定为不正常请求了。
|
4
woshichuanqilz OP @gluttony 本地 IP 不加代理可以的
|
5
woshichuanqilz OP @zh1997 一个验证页面就是填验证码的页面
|
6
woshichuanqilz OP @ooh 什么意思
|
7
Te11UA 2020-07-28 15:58:54 +08:00
代理 IP 大部分都是复用的,被识别出来很正常,你自己的 IP 又没有什么异常行为当然放过你了。做验证码识别可以缓解。
|
8
gluttony 2020-07-28 17:04:21 +08:00
你有没有更换 user-agent ?
```bash curl 'https://www.amazon.co.uk/s?k=dress&ref=nb_sb_noss' \ -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246' \ -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \ -H 'accept-language: en-US,en;q=0.9' \ --compressed ``` 用普通 ip 地址的话访问正常。把 user-agent 改成 curl 等不正常字符串就返回 301,如果你的 request lib 没有设置 follow redirect 的话就得不到正确的网页内容了。 |