前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

正文

Python爬虫反爬策略三部曲,拥有这三步曲就可以在爬虫界立足了:

  1. 浏览器伪装
  2. IP代理池和用户代理池构建
  3. 动态页面加载解决方法
    注意:如果你Python基础不够扎实,建议先学好再来,缺Python最新教程的可以点击下方链接自行获取
    http://note.youdao.com/noteshare?id=a3a533247e4c084a72c9ae88c271e3d1

网站反爬机制常用的方法:

1、通过识别访问的headers来判断是爬虫还是浏览器访问,其中最常用和最重要的就是User-Agent用户代理,服务器可以从这个字段识别出客户端浏览器类型和版本号、客户端的操作系统,页面排版等信息,正是因为这个原因手机和电脑打开的同个网站的页面的排版是不同的,常用的还有Referer等字段;

2、通过用户行为,要是通过一个IP短时间内大量访问数据,该网站可能对这个IP进行短时间的禁止访问,这个可以增加访问延时时间,比如每访问一次延时time.sleep(5),延时5秒,要是爬取的数据量大的话这个爬取时间是挺蛋疼的,最好的方法就是同时构建用户代理池和IP代理池,每访问几次就换一个用户代理和IP代理就完美解决了;

3、动态页面加载,可以通过抓包分析出页面加载的规律然后构造批量请求,如果文件是加密的,可以使用selenium+phantomJS浏览器内核来访问,这个是真实的用户行为,速度比较慢,可以浏览器操作的部分交给selenium+phantomJS,爬取的功能交给爬虫实现,虽然比纯爬虫慢,但是也没办法了。

先来第一部曲

浏览器伪装

  • 通过Request添加headers
  • 通过Opener添加headers
  • 批量添加headers

通过Request添加headers

  1.  
    import urllib.request
  2.  
    url="https://qiushibaike.com"
  3.  
    headers={"User-Agent":"Mozilla/5.0 (Windows NT6.1; WOW64) Apple\
  4.  
    WebKit/537.36 (KHTML, likeGecko) Chrome/69.0.3497.92 Safari/537.36"}
  5.  
    req=urllib.request.Request(url,headers=headers)
  6.  
    #对request进行封装
  7.  
    data=urllib.request.urlopen(req).read().decode("utf-8","ignore")

通过Opener添加headers

基本的urlopen()函数不支持验证、cookie或其他HTTP高级功能,要支持这些功能必须使用build_opener()函数来创建自己的自定义Opener对象

install_opener(opener)安装opener作为urlopen()使用的全局URL opener,即意味着以后调用urlopen()时都会使用安装的opener对象。

  1.  
    import urllib.request
  2.  
    url="https://www.qiushibaike.com/"
  3.  
    headers=("User-Agent":"Mozilla/5.0 (Windows NT6.1; WOW64) Apple\
  4.  
    WebKit/537.36 (KHTML, likeGecko) Chrome/69.0.3497.92 Safari/537.36")
  5.  
    opener=urllib.request.build_opener()
  6.  
    opener.addheaders=[headers]
  7.  
    data=opener.open(url).read()
  8.  
    #使用自定义的伪装浏览器进行访问
  9.  
    urllib.request.install_opener(opener)
  10.  
    data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
  11.  
    #也可以安装为全局,意味着以后调用urlopen()函数都会使用安装的opener对象

通过批量添加headers

  1.  
    import urllib.request
  2.  
    url="https://qiushibaike.com"
  3.  
    headers={
  4.  
    "User-Agent":"Mozilla/5.0 (Windows NT6.1; WOW64) Apple\
  5.  
    WebKit/537.36 (KHTML, likeGecko) Chrome/69.0.3497.92 Safari/537.36",
  6.  
    "Referer":"https://qiushibaike.com"
  7.  
    }
  8.  
    #这里只是做一个演示,可以添加更多的字段,有些字段是不用的,有些字段是要的,这个可以进行抓包分析请求需求
  9.  
    opener=urllib.request.build_opener()
  10.  
    headerall=[]
  11.  
    for key,value in headers.item():
  12.  
    item=(key,value)
  13.  
    headerall.apend(item)
  14.  
    #[("",""),("","")] 遍历存储以后的形式
  15.  
    opener.addheaders=headersall
  16.  
    urllib.request.install_opener(opener)
  17.  
    data=urllib.request.urlopen(url).read().decode("utf-8","ignore")

浏览器伪装可以解决大部分网站的反爬机制,大型网站反爬机制就比较复杂点了,后面更新构建IP代理和用户代理,动态页面加载的解决方法

【Python必学】Python爬虫反爬策略你肯定不会吧?的更多相关文章

  1. python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题

    python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题 一丶爬虫概述       通过编写程序'模拟浏览器'上网,然后通 ...

  2. Python爬虫实战——反爬策略之模拟登录【CSDN】

    在<Python爬虫实战-- Request对象之header伪装策略>中,我们就已经讲到:=="在header当中,我们经常会添加两个参数--cookie 和 User-Age ...

  3. 抖音爬虫教程,python爬虫采集反爬策略

    一.爬虫与反爬简介 爬虫就是我们利用某种程序代替人工批量读取.获取网站上的资料信息.而反爬则是跟爬虫的对立面,是竭尽全力阻止非人为的采集网站信息,二者相生相克,水火不容,到目前为止大部分的网站都还是可 ...

  4. Python爬虫——反爬

    反爬概述 网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成. 但是当网络爬虫被滥用后,互联网上就出现太多同质的东西,原创得不到保护. 于是,很多网站开始反网络爬 ...

  5. Python必学Django框架,入门到精通学习视频教程全都在这可以领

    “人生苦短,我用python”,学python的小伙伴应该都了解这句话的含义.但是,学python,你真正了了解强大的Django框架吗!? 据说Django还是由吉普赛的一个吉他手的名字命名的呢,有 ...

  6. 爬虫反爬之代理IP

    爬虫反爬之代理IP 代理IP其实本就是在requests模块中的参数 定义: 代替原来的IP地址去对接网络的IP地址. 作用: 隐藏自身真实IP,避免被封. 获取代理IP网站 西刺代理.快代理.全网代 ...

  7. Python必学:使用哪款文本编辑器更好?

    Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍. 所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程 ...

  8. Python必学之编译器用哪个好?你用错了吧!

    学python要知道怎么用好编译器.当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件由于整个Pyth ...

  9. Python爬虫实战——反爬策略之代理IP【无忧代理】

    一般情况下,我并不建议使用自己的IP来爬取网站,而是会使用代理IP. 原因很简单:爬虫一般都有很高的访问频率,当服务器监测到某个IP以过高的访问频率在进行访问,它便会认为这个IP是一只"爬虫 ...

随机推荐

  1. PHP Laravel 队列技巧:Fail、Retry 或者 Delay

    当创建队列jobs.监听器或订阅服务器以推送到队列中时,您可能会开始认为,一旦分派,队列工作器决定如何处理您的逻辑就完全由您自己决定了. 嗯……并不是说你不能从作业内部与队列工作器交互,但是通常情况下 ...

  2. 如何基于 PHP-X 快速开发一个 PHP 扩展

    0x01 起步 PHP-X本身基于C++11开发,使用cmake进行编译配置.首先,你需要确定所有依赖项已安装好.包括: gcc-4.8 或更高版本 PHP7.0 或更高版本,需要php7-dev 开 ...

  3. nyoj 62-笨小熊(以对应数组中的ASC位 + 1)

    62-笨小熊 内存限制:64MB 时间限制:2000ms Special Judge: No accepted:15 submit:43 题目描述: 笨小熊的词汇量很小,所以每次做英语选择题的时候都很 ...

  4. 领扣(LeetCode)设计哈希映射 个人题解

    不使用任何内建的哈希表库设计一个哈希映射 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对.如果键对应的值已经存在,更新这个值. get(key ...

  5. python三种格式化输出

    name = '张三'age = 22job = Engineersalary = 99999999 info1 = ''' ---------- info1 of %s ---------- nam ...

  6. 访问formData的数据

    vant-ui 的 Uploader 上传图片时,用到formData let fd = new FormData(); fd.append('upImgs', file.file); postIma ...

  7. Spring 5 响应式编程

    要点 Reactor 是一个运行在 Java8 之上的响应式流框架,它提供了一组响应式风格的 API 除了个别 API 上的区别,它的原理跟 RxJava 很相似 它是第四代响应式框架,支持操作融合, ...

  8. PostGIS 查看表属性(字段、类型、是否为空)

     SELECT                a.attnum,                a.attname AS field,                t.typname AS type ...

  9. 2019-10-16:渗透测试,基础学习,burpsuit学习,爆破的四种方式学习

    Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具.Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程.所有工具都共享一个请求,并能处理对应的HTTP 消息 ...

  10. websrom编译器

    webstorm less环境配置 备注: 安装node后,在命令行输入npm install -g less 即可安装less,打开webstorm setting-Tools-FileWatche ...