【发布时间】:2018-02-28 11:43:14
【问题描述】:
我正在尝试使用httr 和rvest 从这个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。同时在浏览器中,一切正常,即使我输入验证码网址,它也会将我转回浏览器中的正常网址。
即使我使用代理,我仍然遇到同样的问题。在浏览器中,我可以正常浏览网站,而蜘蛛一直被转移到验证码网址。
我想知道,
- 我使用代理的方式正确吗?
- 为什么蜘蛛一直在传输而浏览器却没有。它们来自同一个 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