爬取亚马逊使用代理的问题

2020-07-28 12:10:05 +08:00
 woshichuanqilz

本地 python requests 直接抓这个网址的内容是 ok 的, 我从快代理上买了代理再用 requests 抓就不行, 但是我用 selenium 加上代理是可以看到这个网页的, 于是我先用 selenium 加代理打开网页, 然后把 requests headers(包括 cookies) 复制出来(就是从开发者模式复制出来), 再用 request 还是不行, requests 抓到的页面需要验证, 但是如果不使用代理, 直接用我本机的 ip, requests 使用 selenium + 代理 获取到的 requests header 使用 也是成功的。 请问这样的问题应该如何解决, 为什么 selenium 没有被禁, 但是 request 使用同样的 headers + 代理就不行, 除了 request header 里面的信息, 服务器是什么逻辑判断我的 request 是爬虫的

https://www.amazon.co.uk/s?k=dress&ref=nb_sb_noss

3017 次点击
所在节点    Python
8 条回复
ooh
2020-07-28 12:12:25 +08:00
代理 IP 直接被识别成代理 IP 去了?
zh1997
2020-07-28 12:25:14 +08:00
通过代理抓取的内容 和状态码是什么
gluttony
2020-07-28 14:04:25 +08:00
cookies 或 LocalStorage 里有些值是通过 JavaScript 算的。你用 request 库不支持 eval js,请求时没有带上这些值就被判定为不正常请求了。
woshichuanqilz
2020-07-28 14:25:30 +08:00
@gluttony 本地 IP 不加代理可以的
woshichuanqilz
2020-07-28 14:25:56 +08:00
@zh1997 一个验证页面就是填验证码的页面
woshichuanqilz
2020-07-28 14:26:11 +08:00
@ooh 什么意思
Te11UA
2020-07-28 15:58:54 +08:00
代理 IP 大部分都是复用的,被识别出来很正常,你自己的 IP 又没有什么异常行为当然放过你了。做验证码识别可以缓解。
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 的话就得不到正确的网页内容了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693708

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX