豆瓣是如何判断爬虫然后封锁的?

2022-05-10 代理百科 0 0

本人做项目要用到豆瓣书籍资料,就写了一个简单的爬虫,但是刚爬了几百本书的信息就被屏蔽了:
HTTP error fetching URL. Status=403, URL=http://book.douban.com/tag/J.K.罗琳?type=T&start=171
没办法,只能等上N个小时后再开始,奇怪的是,被屏蔽后爬虫不能爬取,但是同样的链接我在浏览器里去还是可以访问,真心不知道豆瓣这是怎么做得?
我使用的是Jsoup,爬取的代码是:
Document bookDoc = Jsoup.connect(bookUrl).userAgent(
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko)
Chrome/24.0.1312.56 Safari/537.17").timeout(maxTimeout).get();
难道豆瓣还根据cookie等信息屏蔽爬虫?这是我最关心的问题,谢谢~

项目要用还是搞个API去爬吧,一分钟40个请求

专业爬虫wulf给出了排查的方面。
不知道题主使用fiddler没有?
用fiddler查看请求连接的request、response。最好将爬虫的header和fiddler拦截里的header设置成一样。
不过题主的爬虫已经爬了很多篇了,看样子爬虫是没问题。
只能试试修改一些参数,再去爬,如果成功了,看看里面的规律。

我原来爬豆瓣相册图片的时候,如果不设置时间间隔,很快就被封了,后来每隔几百毫秒爬一张图片,没被封过。另外我爬的数据量小,那个相册才350张照片。

豆瓣还算友好吧,设置个时间间隔,别太快,换个agent,我爬了好多书也没被封。

豆瓣的没抓过,不过你可以尝试更换IP地址后再请求,还有就是你的爬虫发送的请求,是否和你浏览器发送的请求一致?
比如你爬虫的头信息中是否带上了referer?
有些网站是根据这个做验证的。
比如ELONG就是这么搞的,不带referer,你什么都别想请求到。
还有你爬虫发出的请求中的各个参数是否都正确?
编码格式是否符合网站要求?

虽然没有实际试过,但一般情况应该就是豆瓣对访问的浏览器进行了判断,例如识别出是手机浏览器就自动跳转到网站wap版地址,所以按理应该在程序里模拟一下浏览器访问相应地址应该就可以了,PHP里用curl_setopt设置一下CURLOPT_USERAGENT

做爬虫 不设时间差就是耍流氓不戴套啊 - -

爬太快了,另外伪装好你的爬虫,伪装成ie比较好

不太清楚豆瓣防屏蔽的具体机制
我之前抓豆瓣的数据也一直被403,后来把程序放到SAE就万事大吉了。。。
好吧,打个小广告 豆瓣各种热帖 豆瓣直播帖 豆瓣直播热帖 实时脱水版

人家都提供API了你就不要爬了,对网站不友好自己又要费劲解析。
获取图书信息
GET https://api.douban.com/v2/book/:id

发表评论
评论列表