资讯专栏INFORMATION COLUMN

Python 从零开始爬虫(一)——爬虫伪装&反“反爬”

int64 / 1533人阅读

摘要:总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口要么在网站植入各种反爬机制,让爬虫知难而退。本节内容就着这两种反爬策略提出一些对策。内嵌反爬很灵活,没有什么固定的代码格式,要花时间去分析出来。

  之前提到过,有些网站是防爬虫的。其实事实是,凡是有一定规模的网站,大公司的网站,或是盈利性质比较强的网站,都是有高级的防爬措施的。总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口;要么在网站植入各种反爬机制,让爬虫知难而退。
  本节内容就着这两种反爬策略提出一些对策。

身份伪装

  就算是一些不知名的小网站,多多少少还会检查一下headers验证一下访者的身份,大网站就更不用说了(我一次爬网易云的时候,忘记加headers,直接被红掉)
  所以,为了让虫宝们带着信息凯旋归来,我们要教会爬虫们如何伪装;有时光伪装也不行,我们还要教爬虫具体"如何做人",让自己的举止更像普通人而不是比单身汉手速还快的未知生物。

自定制 Requests Headers

“吾是人!”——修改user-agent:里面储存的是系统和浏览器的型号版本,通过修改它来假装自己是人。

“我从河北省来”——修改referer:告诉服务器你是通过哪个网址点进来的而不是凭空出现的,有些网站会检查。

“饼干!”:——带上cookie,有时带不带饼干得到的结果是不同的,试着带饼干去“贿赂”服务器让她给你完整的信息。

详细数据可以F12捉个包来查看其Requests Headers

headers = {"Referer":"https://accounts.pixiv.net/loginlang=zh&source=pc&view_type=page&ref=wwwtop_accounts_index",#如某些网站(如p站)要检查referer,就给他加上
           "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"#每个爬虫必备的伪装
          }
r = requests.get("https://segmentfault.com/a/1190000014383966",headers=headers)

headers数据通常用这两个即可,而且笔者强烈推荐在爬虫中为每个request都配个user-agent,总比什么都没有好,加了也不会报错。

降低主IP访问频率

注意:这是针对长期的,大范围的爬虫的

有些网站会监视某个ip的访问频率和次数,一但超过某个阈值,就把你当作爬虫嫌犯赶出去了,这时就要想办法降低自己的存在感了。

Zzzzz——休眠:爬一段时间后休息一会,不仅是为了自己的成功,也是为服务器着想。

我不去,我派别人去——ip代理:通过proxies参数来使用,前提是你要有ip,好的ip代理是要花钱的。

time.sleep(60)#用python自带time模块的休眠功能
proxies = {"http": "http://10.10.1.10:3128",#“协议类型:完整ip地址+端号”
           "https": "http://10.10.1.10:1080"}#代理ip字典,随机调用
r = requests.get(url,headers=headers,proxies=proxies)
反 反爬(简析)

在系列第零篇中我提到获取网页源码是有坑的,没错,有些时候headers伪装什么的都做足了,可你还是不能如愿以偿的获得正确的网页源码,要么缺,要么给你一堆毫不相关的东西,要么干脆让你红掉。
这说明要点不是伪不伪装的问题了,而是如何去解读网页的防爬机制从而推出解决方法,这就要求比较高的观察和分析能力了

就我目前遇到的主要有:

随机校验码:网页生成随机码,并要求你将其提交才接受你的请求(多用在登录验证中)。——这种校验码通常藏在网页源码中,先取再交是策略。

无序网址:网址后跟着一大串看不出规律的东西。——跟这种东西是没话说的,直接上selenium

加密/杂乱的源码:你知道你要的东西就在那里,但是不知道怎样提取出来。——推理解谜,看脑子好不好使了。

动态加载:需要和页面交互才能获取更多信息,但是爬虫没法和它交互啊。——直接上selenium/手动捉包分析出目标链接

ajax技术:异步加载,网页内容分次加载,用爬虫只能得到第一次发出的html,导致信息不全。——上selenium/手动捉包分析出目标连接

补充:
selenium模块,模拟浏览器,强是强但是缺点是慢。
其实动态加载是为了方便用户点哪看哪的,但这也加大了爬虫的难度,因为很多信息因此被隐藏了起来。

最后

伪装有套路,代码直接套,多加headers总没错。

内嵌反爬很灵活,没有什么固定的代码格式,要花时间去分析出来。

本文新出现的方法/模块,后面会有实例,不要方。

下一篇正式进入网页解析主题,之后就可以开始写小爬虫了♪(^∀^●)ノ。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41540.html

相关文章

  • 极简爬虫攻防战纪要

    ...段。那么爬方的第个堡垒就基于浏览器的真实性检测开始构建。     战役伊始, 爬虫方率先祭出User-Agent, Content-Type, Application/*,iAccept-Encoding, Accept-Language, X-Forwarded-For, Referer等headers电网, 第批与正常浏览器headers不同的...

    elliott_hu 评论0 收藏0
  • 如何快速掌握Python数据采集与网络爬虫技术

    摘要:本文详细讲解了python网络爬虫,并介绍抓包分析等技术,实战训练三个网络爬虫案例,并简单补充了常见的爬策略与爬攻克手段。通过本文的学习,可以快速掌握网络爬虫基础,结合实战练习,写出些简单的爬...

    W4n9Hu1 评论0 收藏0
  • Python 从零开始爬虫(零)——爬虫思路&requests模块使用

    前言 python 3.6 !! 本爬虫系列是面对有Python语法基础的读者写的,如果你没学过python,emmmm.....也没关系,你或许能从每篇文章中学到爬虫的思路;如果你的python基础语法已经应用自如,那是极好的。 本系列的教程和实...

    YanceyOfficial 评论0 收藏0
  • 爬虫攻防实践

    ...基本的requests开始。requests是常用的http请求库,它使用python语言编写,可以方便地发送http请求,以及方便地处理响应结果。这是段抓取豆瓣电影内容的代码。 import requests from lxml import etree url = "https://movie.douban.com/subject/129205...

    wanglu1209 评论0 收藏0
  • 爬虫攻防实践

    ...基本的requests开始。requests是常用的http请求库,它使用python语言编写,可以方便地发送http请求,以及方便地处理响应结果。这是段抓取豆瓣电影内容的代码。 import requests from lxml import etree url = "https://movie.douban.com/subject/129205...

    xiangzhihong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<