我正在尝试使用httr
和rvest
从此website抓取数据。经过几次刮刮(大约90-100)后,网站会自动将我转移到另一个带验证码的网址。
这是正常的网址:"https://fs.lianjia.com/ershoufang/pg1"
这是验证码网址:"http://captcha.lianjia.com/?redirect=http%3A%2F%2Ffs.lianjia.com%2Fershoufang%2Fpg1"
当我的蜘蛛穿过验证码时,它会告诉我停止并在浏览器中解决它。然后我在浏览器中手动解决它。但是当我运行蜘蛛并发送GET
请求时,蜘蛛仍会转移到验证码网址。同时在浏览器中,一切正常,即使我输入验证码网址,它也会将我转回浏览器中的普通网址。
即使我使用代理,我仍然遇到同样的问题。在浏览器中,我通常可以浏览网站,而蜘蛛一直被转移到验证码网址。
我在想,
感谢。
这是我的代码:
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,它很慢,但没有更多的验证码。即使它出现,我也可以直接在浏览器中解决它。
答案 0 :(得分:1)
您正在获取CAPTCHA,因为这是网站试图阻止非人/编程脚本报废数据的方式。因此,当您尝试抓取数据时,它会将您检测为非人/机器人脚本。发生这种情况的原因是因为您的脚本发送非常频繁的GET请求以及一些参数数据。您的程序需要像真实用户一样(以随机时间模式,不同浏览器和IP访问网站)。
您可以通过使用以下参数进行操作来避免获取CAPTCHA。所以你的程序看起来就像一个真正的用户:
发送GET请求时使用随机性。就像你可以在发送每个GET请求之前使用Sys.sleep
函数(使用随机分布)来休眠。
操纵用户代理数据(Mozilla,Chrome,IE等),cookie接受和编码。
操纵您的源位置(IP地址和服务器信息)
操纵这些信息将帮助您避免以某种方式获得CAPTACHA验证。