### 1.什么是爬虫和反爬虫

* **爬虫**是使用任何技术手段批量获取网站信息的一种方式,**反爬虫**是使用任何技术手段阻止别人批量获取自己网站信息的一种方式;

### 2.User-Agent介绍

* `User Agent`中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称`UA`。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识;

* `User-Agent`是`headers`中的一个属性,表示当前访问服务器的身份信息,如果同一个身份过于频繁的访问服务器会被识别为机器身份,遭到反爬的打击,所以需要频繁的更改User-Agent信息;

* User-Agent字段解析:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息;

### 3.使用不同的User-Agent来规避反爬策略

* 想要随机更改User-Agent,首先我们可以在蜘蛛文件的Spider类中添加一个header请求头,很多网站只需要userAgent信息就可以通过,但是有的网站还需要验证一些其他的信息,所以我们可以在请求头中添加一些需要用到的字段,比如:

* `Accept`:客户端支持的数据类型,用逗号隔开,是有顺序的,分号前面是主类型,分号后是子类型;

* `Accept-Encoding`:指定浏览器可以支持的web服务器返回内容压缩编码类型;

* `Accept-Language`:浏览器可接受的自然语言的类型;

* `Connection`:设置HTTP连接的持久化,通常都是Keep-Alive;

* `host`:服务器的域名或IP地址,如果不是通用端口,还包含该端口号;

* `Referer`:指当前请求的URL是在什么地址引用的;

```

headers = {

'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Connection': 'keep-alive',

'host': 'dribbble.com/stories',

'Referer': 'https://dribbble.com/',

}

```

* 添加完请求头需要的字段,我们可以在settings.py 文件中手动创建一个User-Agent列表

```

user_agent_list = [

"Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16",

"Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14",

"Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14",

"Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02",

"Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00",

"Opera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00",

"Opera/12.0(Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00",

"Opera/12.0(Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00",

"Mozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/14.0 Opera/12.0",

"Opera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62",

"Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62",

"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",

"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52",

"Opera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51",

"Opera/9.80 (X11; Linux x86_64; U; fr) Presto/2.9.168 Version/11.50",

"Opera/9.80 (X11; Linux i686; U; hu) Presto/2.9.168 Version/11.50",

"Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11",

"Opera/9.80 (X11; Linux i686; U; es-ES) Presto/2.8.131 Version/11.11",

"Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/5.0 Opera 11.11",

"Opera/9.80 (X11; Linux x86_64; U; bg) Presto/2.8.131 Version/11.10",

"Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10",

"Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10",

"Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1",

"Opera/9.80 (X11; Linux x86_64; U; Ubuntu/10.10 (maverick); pl) Presto/2.7.62 Version/11.01",

]

```

* 然后在项目中创建一个utils.py文件,在这个文件中自定义一个随机函数

```

import random

def get_randam_int(lst):

return random.randint(0, len(lst)-1)

```

* 最后修改蜘蛛文件中的parse()方法,导入相关模块,调用自定义的随机函数生成随机User-gent添加到headers请求头中;

```

def parse(self, response):

headers = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Connection': 'keep-alive',

'host': 'dribbble.com',

'Referer': 'https://dribbble.com/',

}

random_index = get_randam_int(user_agent_list)

random_agent = user_agent_list[random_index]

headers['User-Agent'] = random_agent

a_nodes = response.css('header div.teaser a')

for a_node in a_nodes:

# print(a_node)

a_url = a_node.css('::attr(href)').extract()[0]

a_image_url = a_node.css('img::attr(src)').extract()[0]

yield Request(headers=headers,url=parse.urljoin(response.url, a_url), callback=self.parse_analyse, meta={'a_image_url': a_image_url})

```

### 4.也可以在中间件中设置User Agent

![](https://upload-images.jianshu.io/upload_images/3260639-b7cb14952af933e0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### 5.调试工具

* 打开你需要爬虫的网页;

* 按键盘的F12或手动去浏览器右上角的“更多工具”选项选择开发者工具;

* 按键盘的F5刷新网页;

* 选择Network中的Doc;

* 点击Headers,就可以在最末尾查看Request Headers的User-Agent字段,也可以复制使用User-Agent字段;

参考:[https://www.9xkd.com/user/plan-view.html?id=1782598054](https://www.9xkd.com/user/plan-view.html?id=1782598054)

python反爬虫策略_突破反爬虫策略相关推荐

  1. python爬虫进阶,突破反脚本机制(反爬机制)

    前言 相信大家在做爬虫或者自动化脚本时或多或少的都能遇到反爬机制(或者说反脚本机制),最常见的反脚本机制都是在登录时进行验证,据本人大量实战(帮粉丝写脚本)发现,基本上只要有点水平的网站都会有反脚本的 ...

  2. python pyc文件解析_如何反编译pyc文件

    如何将.pyc和.pyo文件反编译为.py文件 pyc大约在python2刚出的时候有.后来就很少找得到了.有一次,不小心把.py删除了,通过pyc还把代码还原了. 你搜索uncompyle2, de ...

  3. 潭州教育可以学python爬虫吗?_什么是爬虫?其运行原理是什么?只有Python才可以吗?...

    爬虫是什么? 本文所说的爬虫不是自然界中的爬行动物,而是运行在网络中的一个自动处理信息的程序. 爬虫是一个程序,该程序利用网络请求(HTTP/HTTPS)进行数据的筛选和录入.因为网络信息维度很广泛, ...

  4. python 网格策略_『量化经典策略』网格策略

    最近心血来潮寻思把量化投资的一些经典策略都总结下,供感兴趣的朋友参考. 网格策略:是一种捕捉盘整行情的隔30点或其他合适的点数设置买点和平仓点的交易策略,主要思想就是在股价比设定的基准价下跌时逐渐加仓 ...

  5. python爬虫反爬机制_浅谈爬虫及绕过网站反爬取机制之Python深度应用

    我们中公优就业的老师希望能给那些面临困境的朋友们带来一点帮助!(相关阅读推荐:Python学习就看这里!) 爬虫是什么呢,简单而片面的说,爬虫就是由计算机自动与服务器交互获取数据的工具.爬虫的最基本就 ...

  6. python多线程爬虫界面_多线程网页爬虫 python 实现

    #!/usr/bin/env python #coding=utf-8 importthreadingimporturllibimportreimporttime g_mutex=threading. ...

  7. python爬京东优惠券_京东抽奖爬虫LiteVersion

    京东全能工具包 JDPackage V2.3 作者接一切数据&Web&小程序开发外包服务,介绍人提供10%-20%佣金.可签合同.开正规公司发票. 作者2018.8.27留 感谢大 ...

  8. python如何爬取图片_百度图片爬虫-python版-如何爬取百度图片?

    上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://5912119.blog.51cto.com/5902119/1771391 这一篇我想写写如何爬取百度图片的爬虫, ...

  9. python爬网易云_如何用爬虫获取网易云音乐歌单中的歌曲?

    --------------------------------- 泻药,以我抓取了307835首网易云音乐的歌单歌曲的经验,讲一下这个问题. 喜欢用Github的可以直接看我的项目源码,代码简单.具 ...

最新文章

  1. 《OpenCV3编程入门》学习笔记6 图像处理(一)线性滤波:方框滤波、均值滤波、高斯滤波
  2. 算法试题 - 找出最小 k 个数
  3. spark RDD官网RDD编程指南
  4. unity 继承会调用start吗_Unity 继承MonoBehaviour脚本 执行顺序 详解
  5. mysql开源内库_将内裤穿在外面的男人(mysql)
  6. MM(Majorize-Minimization, Minorize-Maximization)优化方法
  7. 使用番石榴的5个理由
  8. 倒推后台系统_CRM客户管理系统
  9. 【kafka】Apache Kafka 0.11版本新功能简介
  10. 关于UIImageView的显示问题
  11. 社交网络中各类产品形态的分析
  12. idea中改了jsp代码不生效_使用IDEA编写jsp时EL表达式不起作用的问题及解决方法...
  13. 64位ODBC数据源配置
  14. java+mail+authen_JavaMail - 身份验证( Authentication)
  15. 【历史上的今天】9 月 26 日:硅晶体管先驱出生;黑客盗取雅虎用户信息;“生物圈 2 号”实验室
  16. 二级域名分发系统源码
  17. 中国Linux杰出人物
  18. 乐理小课堂——自然/和声/旋律大调的调式音阶
  19. UI设计中搜索页设计指南
  20. 顶点计划6-4小组调研报告

热门文章

  1. 64位电脑计算机有什么用,win7 64位旗舰版系统电脑内存大有什么好处
  2. python print end报错_python中print()函数的用法和end=不换行详解
  3. Shader 学习笔记:描边
  4. 字符串加减法(整数,小数)
  5. 项目调研丨以太坊再质押项目EigenLayer白皮书四大看点(内附完整版中文白皮书)
  6. 什么是python的库_什么是python标准库
  7. 俄罗斯手机厂商,转向鸿蒙系统?华为:我暂时不向海外推鸿蒙手机
  8. html after不显示,css after不起作用?
  9. JVM年轻代(young generation)老年代(old generation tenured)持久代(permanent generation)GC
  10. 中国高新技术产业导报专访:区块链或将进入去伪存真时代