专栏首页小詹同学反爬虫和反反爬虫(上篇)

反爬虫和反反爬虫(上篇)

公众号爬取今日头条的那一期,不少小伙伴反应爬取下来的图片无法查看或者爬取不了,小詹也重新试了下,的确是的,写那篇推文的时候,头条还比较友好,没有添加反爬措施,大概是爬取的朋友太多,对其造成了极大的压力吧,添加了某些反爬技术,然而,上有政策,下有对策,粉丝群有小伙伴改写了程序并添加了反反爬策略进行了妹子的爬取~

那么今天小詹就带着大家一起学习学习爬虫中的反爬和反反爬知识(二者概念通俗易懂,就不进行介绍啦)~

反爬虫

现在越来越多的网站或者APP都有反爬的策略,我们得知道,为什么那些网站会存在反爬虫。大抵有几点原因:避免内部信息的泄露,导致经济上损失;避免非人为操作,爬虫过于频繁,造成服务器的崩溃。

反爬虫的方式有很多:

1. 最为经典的反爬虫策略当属“验证码”了。因为验证码是图片,用户登录时只需输入一次便可录成功,而我们程序抓取数据过程中,需要不断的登录,手动输入验证码是不现实的,所以验证码的出现难倒了一大批人。

2.一种比较恶心又比较常见的反爬虫策略当属封ip和封账号,当你抓取频率过快时,ip或者账号被检测出异常会被封禁。

3.还有一种比较普通的反爬虫策略:通过cookie限制抓取信息,比如我们模拟登陆之后,想拿到登陆之后某页面信息,千万不要以为模拟登陆之后就所有页面都可以抓了,有时候还需要请求一些中间页面拿到特定cookie,然后才可以抓到我们需要的页面。

4.另外一种比较常见的反爬虫模式当属采用JS渲染页面了。什么意思呢,就是返回的页面并不是直接请求得到,而是有一部分由JS操作DOM得到,所以那部分数据我们也拿不到咯。

……

反爬虫技术很多,今天主要讲的是大家平时爬妹子图时候比较容易遇到的:

(1)通过Headers反爬虫

从用户请求的Headers反爬虫是最常见的反爬虫策略。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。

(2)基于用户行为的反爬虫

还有一部分网站是通过检测用户行为,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。

(3)动态页面的反爬虫

上述的几种情况大多都是出现在静态页面,还有一部分网站,我们需要爬取的数据是通过ajax请求得到,或者通过JavaScript生成的。

反反爬虫

对应较为常见的几种反爬技术进行介绍,实现反反爬!

(1)通过Headers反爬虫

如果遇到了这类反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。

修改Headers有两种方式。一种是通过Request的headers参数进行修改,另一种是利用Request.add_header()方法进行修改。

#方式一:
header = {}
header['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
方式二:
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36')

(2)基于用户行为的反爬虫

大多数网站都是前一种情况,对于这种情况,使用IP代理就可以解决。可以专门写一个爬虫,爬取网上公开的代理ip,检测后全部保存起来。这样的代理ip爬虫经常会用到,最好自己准备一个。有了大量代理ip后可以每请求几次更换一个ip,这在requests或者urllib2中很容易做到,这样就能很容易的绕过第一种反爬虫。使用代理IP步骤如下图:

如下代码,百度的三个代理,使用ip代理。

proxies = ['125.120.201.62:808',   
    '183.159.91.240:18118',  
    '171.12.182.238:26316',
    ]
proxy = random.choice(proxies)
proxy_support = urllib.request.ProxyHandler({'http':proxy})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)

对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求(time.sleep函数)。有些有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制。

(3)动态页面的反爬虫

首先用Firebug或者HttpFox对网络请求进行分析。如果能够找到ajax请求,也能分析出具体的参数和响应的具体含义,我们就能采用上面的方法,直接利用requests或者urllib2模拟ajax请求,对响应的json进行分析得到需要的数据。

往期推荐

Python爬虫系列——入门到精通

Python爬虫实例之——小说下载

老司机带你用python来爬取妹子图

知乎大神爬取高颜值美女(Python爬虫+人脸检测+颜值检测)

千元资料免费送——人工智能相关(100G+)

资源福利第二弹——PPT模板和求职简历

资源福利第三弹——Python等教程(包括部分爬虫入门教程)

本文分享自微信公众号 - 小詹学Python(xiaoxiaozhantongxue)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 你为什么学爬虫?(赠书活动第③期)

    之前应邀转载了一个小伙伴的文章《爬取了陈奕迅新歌《我们》10万条评论数据发现:原来,有些人只适合遇见》,十分好评!小詹就想着爬一下曾经一度流行的那些青春校园电影...

    小小詹同学
  • NB,用这一篇文章带你了解什么是爬虫?

    小詹说:对于学 Python 的小伙伴来说,爬虫是大多数人的入门菜,很是因吹斯汀。那么到底什么是爬虫呢,这篇文章用一个简单的语言来一节入门课。以下为原文。

    小小詹同学
  • 一起看看这几个网站是如何反爬的 。

    因为 Python 语法简介以及强大的第三方库,所以我们使用它来制作网络爬虫程序。网络爬虫的用途是进行数据采集,也就是将互联网中的数据采集过来。

    小小詹同学
  • 对爬虫工程师的理解

    本文转载自简书小温侯 原文链接:https://www.jianshu.com/p/61fe5b9320ac

    林清猫耳
  • 【程序源代码】python爬虫

    多种电商商品数据爬虫,整理收集爬虫练习。每个项目都是成员写的。通过实战项目练习解决一般爬虫中遇到的问题。通过每个项目的 readme,了解爬取过程分析。对于精通...

    程序源代码
  • 关于反爬虫,看这一篇就够了

    本文来自携程酒店研发部研发经理崔广宇在第三期【携程技术微分享】上的分享,以下为整理的内容概要。墙裂建议点击下方视频,“现场”围观段子手攻城狮大崔,如何高智商&高...

    华章科技
  • 找python爬虫小项目?github给你准备好了!

    即使我们都是程序员,但我们也并非都会修电脑,都会做酷炫的ppt,都会优化系统卡顿。其实程序员也是分行业、分专业的,就像医生也分内外科、呼吸科、神经科神的。

    efonfighting
  • 请不要污名化爬虫!

    最近有一篇名为《只因写了一段爬虫,公司200多人被抓!》的文章非常火,相信大家应该都看到了。

    云爬虫技术研究笔记
  • 辟谣错误的爬虫说法,使用正确的爬虫姿势

    那篇文章的故事中提到的,是一家名为「巧达数据」的公司,如果之前有关注过相关新闻的朋友应该不难发现,这个公司实际上在3月份的时候就已经被查封了!

    Python猫
  • 爬虫系列的总结

    时光荏苒,四个月时间如流沙般从手心中流逝。这四个月自己算是收获颇多。因为在张哥的影响下,自己渐渐喜欢上写作。自己将所学的爬虫知识、学习心得以及如何学习分享出来。...

    猴哥yuri

扫码关注云+社区

领取腾讯云代金券