【问题标题】:how to deal with captcha when web scraping using R使用R进行网页抓取时如何处理验证码
【发布时间】:2018-02-28 11:43:14
【问题描述】:

我正在尝试使用httrrvest 从这个website 中抓取数据。经过几次抓取(大约 90 - 100 次),网站会自动将我转移到另一个带有验证码的 url。

这是正常的网址:"https://fs.lianjia.com/ershoufang/pg1"

这是验证码网址:"http://captcha.lianjia.com/?redirect=http%3A%2F%2Ffs.lianjia.com%2Fershoufang%2Fpg1"

当我的蜘蛛遇到验证码 url 时,它会告诉我停止并在浏览器中解决它。然后我在浏览器中手动解决它。但是当我运行蜘蛛并发送GET 请求时,蜘蛛仍然转移到验证码url。同时在浏览器中,一切正常,即使我输入验证码网址,它也会将我转回浏览器中的正常网址。

即使我使用代理,我仍然遇到同样的问题。在浏览器中,我可以正常浏览网站,而蜘蛛一直被转移到验证码网址。

我想知道,

  1. 我使用代理的方式正确吗?
  2. 为什么蜘蛛一直在传输而浏览器却没有。它们来自同一个 IP。

谢谢。

这是我的代码:

a <- GET(url, use_proxy(proxy, port), timeout(10),
          add_headers('User-Agent' = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
                      'Connection' = 'keep-alive',
                      'Accept-Language' = 'en-GB,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,en-US;q=0.2,fr;q=0.2,zh-TW;q=0.2',
                      'Accept-Encoding' = 'gzip, deflate, br',
                      'Host' = 'ajax.api.lianjia.com',
                      'Accept' = '*/*',
                      'Accept-Charset' = 'GBK,utf-8;q=0.7,*;q=0.3',
                      'Cache-Control' = 'max-age=0'))
b <- a %>% read_html %>% html_nodes('div.leftContent') %>% html_nodes('div.info.clear') %>% 
            html_nodes('div.title') %>% html_text()

最后,我求助于 RSelenium,它很慢,但没有更多的验证码。即使出现了,我也可以直接在浏览器中解决。

【问题讨论】:

  • 这是网站有意控制您如何使用其数据的功能。一旦您清除浏览器上的验证码,它就会拥有一个 cookie。您的 R 脚本没有这样的“密钥”来显示它何时返回,因此它再次获取验证码。该站点以这种方式工作是有道理的,因为您计算机上的恶意脚本可能会尝试使用您的 IP 地址来抓取(甚至窃取)数据并将其发送到其他地方……这是站点对此类行为的防御。您应该调查网站的条款,以确保您没有通过抓取来违反它们。

标签: r web-scraping web-crawler captcha httr


【解决方案1】:

您正在获取验证码,因为这是网站试图防止非人类/编程脚本报废其数据的方式。因此,当您尝试抓取数据时,它会将您检测为非人类/机器人脚本。发生这种情况的原因是您的脚本发送非常频繁的 GET 请求以及一些参数数据。你的程序需要表现得像一个真实的用户(以随机时间模式访问网站,不同的浏览器和 IP)。

您可以通过如下操作这些参数来避免获取 CAPTCHA。所以你的程序看起来就像一个真实的用户:

  1. 发送 GET 请求时使用随机性。就像你可以在发送每个 GET 请求之前使用Sys.sleep 函数(使用随机分布)休眠。

  2. 处理用户代理数据(Mozilla、Chrome、IE 等)、cookie 接受和编码。

  3. 操纵您的源位置(IP 地址和服务器信息)

处理这些信息将帮助您避免以某种方式获得 CAPTACHA 验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2014-12-28
    • 2022-07-14
    相关资源
    最近更新 更多