scrapy实战之与豆瓣反爬抗争

前言

scrapy是优秀的Python爬虫框架,最近在使用scrapy爬取豆瓣音乐信息时,着实被其反爬机制搞了一下。虽然豆瓣提供了各种API可以供我们提取信息,但是我就是要用爬虫爬你练手。

正文

常见的反爬机制有如下几种

1.请求头检查,比如cookies,user-agent,refer,甚至Accept-Language等等,这也是最基本的反爬机制。

2.访问频次检查,如果一个ip在短时间内访问次服务器次数过于频繁,且cookies相同,则会被判定为机器人,你可能会被要求登录后再访问服务器或者输入验证码,甚至直接封禁你的ip。

3.验证码验证,爬虫无法轻易绕过这一关。

4.有些网页的元素是动态生成的,只有在js加载完成后才会显示。比如很多实用了Ajax的网站,都会有动态生成的元素。直接爬取页面将无法获取想要的元素。

5.表单安全措施,如服务器生成的随机变量加入字段检测,提交表单蜜罐等。所谓蜜罐简单来说就是骗机器人的一些表单,比如一下三种:

<a href='...' style='display:none;'> #看不见
<input type='hiden' ...> #隐藏
<input style='position:absolute; right:50000px;overflow-x:hidden;' ...> #右移50000像素,且隐藏滚动条,应该出电脑屏幕了,看不到
如果你有关于这些元素操作,就表明你是直接通过页面源码观察网页的,也可以说明你是机器人,至少不是正常人。

反反爬应对策略

1.人为设置请求头,使用谷歌开发者工具F12查看Network可以看到Request Headers。不嫌麻烦可以把得到的请求头全部加入自己程序是request里边。

2.设置timesleep,或者download_delay等等,爬一会儿停一下,甚至可以设置随机爬取时间,使你的程序看起来更像人类,或者说不像机器人。有些网站不需要cookies,可以不设置。如果是封禁ip的话,可以设置ip代理池。

3.图像识别,文字识别,关键字OCR,多家公司都有免费产品可用。另外觉得不带劲可以自己训练一个,Google有一个开源的ocr库,就是大名鼎鼎的Tesseract,网上教程很多。

4.对于动态页面,最简单最直接的办法就是使用selenium,这本来是一个自动化测试的框架,不过用它可以真实模拟浏览器,所以可以采集js加载后的页面,配合无头浏览器PhantomJS就可以快速爬取动态页面了。(最新版本的selenium已经不支持PhantomJS了,小公司的创意终究还是倒下了,现在可以使用Headless Chrome,Headless Firefox等,或用旧版selenium)


5.还是使用selenium,因为它还可以模拟鼠标点击拖放等动作。且以真实浏览器视角观察页面,所以可以判断出蜜罐。来一个简单的判断超链接逻辑。

from selenium import webdriver
driver = webdriver.PhantomJS(executable_path='')
driver.get('http://')
links = driver.find_elements_by_tag_name('a')
for link in links:
    if not link.is_display():
        print('its not in the screen')
实战豆瓣

建立一个爬取豆瓣音乐评论

  • 13
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值