python - 即使在更改 header 和 IP 后,验证码也会使用请求。我是如何被跟踪的?

标签 python web-scraping python-requests web-crawler

我正在尝试从 xyz 中抓取一些文章,但是,在抓取一定次数后,会出现一个验证码。

但是,我遇到了重大问题。

  1. 我正在使用 from fake_useragent import UserAgent 来随机化我的 header 。

  2. 我在请求之间使用随机休眠时间

  3. 一旦出现验证码,我将使用 VPN 更改 IP 地址。然而,不知何故,一旦我的 IP 地址出现,验证码仍然会出现。

同样奇怪的是,虽然验证码出现在请求响应中,但浏览器中却没有出现验证码。

所以,我认为 by header 是错误的。

我在获取这个请求的时候关闭了js和cookies,因为有了cookie和js,网站跟踪我的信息就很清楚了。

headers = {
    "authority": "seekingalpha.com",
    "method": "GET",
    "path": "/article/4230872-dillards-still-room-downside",
    "scheme": "https",
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "accept-encoding": "gzip, deflate, br",
    "accept-language": 'en-US,en;q=0.9',
    "upgrade-insecure-requests": "1",
    "user-agent": RANDOM
}

这与网站使用的很接近:他们添加

"cache-control": "max-age=0",
"if-none-match": 'W/"6f11a6f9219176fda72f3cf44b0a2059"',

根据我的研究,这是用于搜索的 etags,可用于跟踪人员。 'W/...' 更改每个请求。

此外,当我使用 wkhtmltopdf 时将屏幕打印为 pdf,我从未出现过验证码。我也尝试过使用更糟糕的 Selenium 。此外,我尝试使用代理,如 here 所示。 .

所以肯定有办法做到这一点。但是,我做的不正确。有谁知道我做错了什么?

编辑:

  1. session 似乎没有工作

  2. 随机 header 似乎不起作用

  3. 随机 sleep 似乎不起作用

  4. 我可以使用我的 VPN 访问该网页。即使使用请求出现验证码,浏览器中的网站上也没有验证码。

  5. Selenium 不起作用。

  6. 我真的不想为解决验证码的服务付费。

我认为问题在于我没有很好地模仿浏览器。

最佳答案

查明被阻止和面临验证码的确切原因并不容易。以下是一些想法:

VPN 和代理

有时,Captcha 服务(在本例中为 Google)可能会将常见的 VPN IP 地址列入黑名单并将其视为潜在威胁,因为很多人都在使用它们并且他们产生大量流量。

有时,代理服务器(尤其是免费的)不是匿名的,可以在请求 header (特别是 X-Forwarded-For header )中发送您的实际 IP 地址

请求 header

您的请求中有某些重要的 header 。使您的请求看起来合法的最简单方法是使用浏览器“开发人员工具”中的“网络”选项卡,并复制浏览器发送的所有 header 。

重要的 header referer 。虽然它可能会或可能不会被网站检查,但将它与网站页面(或主页)之一的 URL 放在一起会更安全:

referer: https://seekingalpha.com/

超时和 session

尝试增加请求之间的超时时间。几秒钟应该是合理的。

最后,尝试使用 session requests 中的对象 .他们自动维护 cookie 并更新 referer跨多个请求,模拟真实用户浏览网站。我发现它们在克服数据抓取保护方面最有帮助。

验证码

最后的手段是使用服务来破解验证码。有许多在线服务(大部分是付费的)可以做到这一点。一个流行的是 DeathByCaptcha。请记住,您可能会违反网站的使用条款,我不建议这样做:)

关于python - 即使在更改 header 和 IP 后,验证码也会使用请求。我是如何被跟踪的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54011831/

相关文章:

javascript - Selenium/Beautiful Soup 刮刀在循环浏览一页后失败(Javascript)

python - Scrapy View 返回空白页

Python请求和beautifulsoup4,仅收集 "href"链接

python - 将一个数据帧值与一个数据帧列合并

Python 循环使用索引号作为键名的一部分

xpath - 所有 XPath 在 CasperJS 中都返回一个不存在的错误?

python - 加速 Pandas 通过请求申请 API 调用

python - 用python登录网页爬取数据

Python - 显示所有节点属性 Networkx

python - 带有列表列的 pandas 时间序列数据框