7-1 爬虫和反爬的对抗过程以及策略

Ⅰ、爬虫和反爬虫基本概念

  1. 爬虫:自动获取网站数据的程序,关键是批量的获取。
  2. 反爬虫:使用技术手段防止爬虫程序的方法。
  3. 误伤:反爬虫技术将普通用户识别为爬虫,如果误伤过高,效果再高也不能用。
  4. 成本:反爬虫需要的人力和机器成本。
  5. 拦截:成功拦截爬虫,一般拦截率越高,误伤率越高。

Ⅱ、反爬虫的目的

  1. 初级爬虫----简单粗暴,不管服务器压力,容易弄挂网站。
  2. 数据保护
  3. 失控的爬虫----由于某些情况下,忘记或者无法关闭的爬虫。
  4. 商业竞争对手

Ⅲ、爬虫和反爬虫对抗过程

7-2 scrapy架构源码分析

原理图:

我最早接触scrapy的时候就是看这张原理图,如下图

现在有新的原理图,更加直观,如下图

看了视频讲的源码解析,看一遍根本看不懂,后期还要多看叫上项目的练习才行。

7-3 Requests和Response介绍

可以看scrapy文档: http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html 查看相关的说明即可。

模拟登陆后,Request会自动传递cookies,不用我们添加。

7-4~5 通过downloadmiddleware随机更换user-agent

这是个模版以后直接拿来用即可

 #middlewares.py文件
from fake_useragent import UserAgent #这是一个随机UserAgent的包,里面有很多UserAgent
class RandomUserAgentMiddleware(object):
def __init__(self, crawler):
super(RandomUserAgentMiddleware, self).__init__() self.ua = UserAgent()
self.ua_type = crawler.settings.get('RANDOM_UA_TYPE', 'random') #从setting文件中读取RANDOM_UA_TYPE值 @classmethod
def from_crawler(cls, crawler):
return cls(crawler) def process_request(self, request, spider):
def get_ua():
'''Gets random UA based on the type setting (random, firefox…)'''
return getattr(self.ua, self.ua_type) user_agent_random=get_ua()
request.headers.setdefault('User-Agent', user_agent_random) #这样就是实现了User-Agent的随即变换
 #settings.py文件
DOWNLOADER_MIDDLEWARES = {
'Lagou.middlewares.RandomUserAgentMiddleware': 543,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None, #这里要设置原来的scrapy的useragent为None,否者会被覆盖掉
}
RANDOM_UA_TYPE='random'

7-6~8 scrapy实现ip代理池

这是个模版以后直接拿来用即可

 #middlewares.py文件
class RandomProxyMiddleware(object):
'''动态设置ip代理'''
def process_request(self,request,spider):
get_ip = GetIP() #这里的函数是传值ip的
request.meta["proxy"] = get_ip
#例如
#get_ip = GetIP() #这里的函数是传值ip的
#request.meta["proxy"] = 'http://110.73.54.0:8123' #settings.py文件
DOWNLOADER_MIDDLEWARES = {
'Lagou.middlewares.RandomProxyMiddleware':542,
'Lagou.middlewares.RandomUserAgentMiddleware': 543,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None, #这里要设置原来的scrapy的useragent为None,否者会被覆盖掉
}

1.sql语言取出随机记录:在此是随机取出一条记录是ip和端口组成代理IP

 select ip,port from proxy_ip
order by rand()
limit 1

2.使用xpath选择器:

可以使用scrapy中的selector,代码如下:

 from scrapy.selector import Selector
html=requests.get(url)
Selector=Selector(text=html.text)
Selector.xpath()

3.if __name__ == "__main__"问题

如果没有这个,调用时会默认运行以下命令

  if __name__ == "__main__":
get_ip=GetIp()
get_ip.get_random_ip()

7-9 云打码实现验证码识别

验证码识别方法

  1. 编码实现(tesseract-ocr)
  2. 在线打码----打码平台(云打码、若快)
  3. 人工打码

7-10 cookie禁用、自动限速、自定义spider的settings

如果用不到cookies的,就不要让对方知道你的cookies--设置---COOKIES_ENABLED = False

自定义setting中的参数可以这样写:

 #在spider.py文件中
custom_settings={
"COOKIES_ENABLED":True,
"":"",
"":"",
}

作者:今孝

出处:http://www.cnblogs.com/jinxiao-pu/p/6762636.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

第7章 Scrapy突破反爬虫的限制的更多相关文章

  1. Python Scrapy突破反爬虫机制(项目实践)

    对于 BOSS 直聘这种网站,当程序请求网页后,服务器响应内容包含了整个页面的 HTML 源代码,这样就可以使用爬虫来爬取数据.但有些网站做了一些“反爬虫”处理,其网页内容不是静态的,而是使用 Jav ...

  2. Scrapy突破反爬虫的限制

    随机切换UserAgent https://github.com/hellysmile/fake-useragent scrapy使用fake-useragent 在全局配置文件中禁用掉默认的UA,将 ...

  3. Scrapy爬取美女图片第四集 突破反爬虫(上)

     本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...

  4. 自动更改IP地址反爬虫封锁,支持多线程(转)

    8年多爬虫经验的人告诉你,国内ADSL是王道,多申请些线路,分布在多个不同的电信机房,能跨省跨市更好,我这里写好的断线重拨组件,你可以直接使用. ADSL拨号上网使用动态IP地址,每一次拨号得到的IP ...

  5. 深入细枝末节,Python的字体反爬虫到底怎么一回事

    内容选自 即将出版 的<Python3 反爬虫原理与绕过实战>,本次公开书稿范围为第 6 章——文本混淆反爬虫.本篇为第 6 章中的第 4 小节,其余小节将 逐步放送 . 字体反爬虫开篇概 ...

  6. Python Scrapy反爬虫常见解决方案(包含5种方法)

    爬虫的本质就是“抓取”第二方网站中有价值的数据,因此,每个网站都会或多或少地采用一些反爬虫技术来防范爬虫.比如前面介绍的通过 User-Agent 请求头验证是否为浏览器.使用 JavaScript ...

  7. 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图

    第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...

  8. 二十四 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图

    1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图

  9. scrapy反反爬虫

    反反爬虫相关机制 Some websites implement certain measures to prevent bots from crawling them, with varying d ...

随机推荐

  1. pageadmin 网站建设系统如何新建进程池并在站点中使用

    1.打开iis管理界面,右键应用程序池,点击添加应用程序池,添加界面如下图,注意pageadmin cms net版本选择4.0,托管模式建议选择集成模式. 2.添加完毕后,在网站中点击对应站点,点击 ...

  2. Python3.5 学习六

    心灵鸡汤 电影推荐 末代独裁.杀戮战场.红色高棉.杀戮战场 面向对象介绍 class 类 object 对象 面向对象特性介绍 类的三大特性: 封装 继承 多态 类的构造函数 def __init__ ...

  3. delphi 10.2---非常简单的数组用法求和

    unit Unit9; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  4. iOS学习笔记(6)——翻译苹果文档About Windows and Views

    About Windows and Views 关于窗口和视图 In iOS, you use windows and views to present your application’s cont ...

  5. CentOS下安装Docker

    简介:本篇文章介绍如何在CentOS系统下面安装docker系统. 官方文档:https://docs.docker.com/install/linux/docker-ce/centos/ Docke ...

  6. 解决无法运行Terminator出现以下问题: File "/usr/bin/terminator"...SyntaxError: invalid syntax

    在安装或者启动Terminator时可能出现这个问题: lin@Dev:~$ terminator File "/usr/bin/terminator", line 123 exc ...

  7. 架构师养成记--33.Redis哨兵、redis简单事务

    Redis哨兵 有了主从复制,如果我想想对主从服务器进行监控,在redis2.6后提供了哨兵机制,2.6有哨兵1.0版本,并不稳定.2.8以后的哨兵功能才稳定起来. 顾名思义,哨兵就是监控Redis系 ...

  8. 4、TensorFlow基础(二)常用API与变量作用域

    1.图.操作和张量 TensorFlow 的计算表现为数据流图,所以 tf.Graph 类中包含一系列表示计算的操作对象(tf.Operation),以及在操作之间流动的数据 — 张量对象(tf.Te ...

  9. 详细解读KMP模式匹配算法

    转载请注明出处:http://blog.csdn.net/fightlei/article/details/52712461 首先我们需要了解什么是模式匹配? 子串定位运算又称为模式匹配(Patter ...

  10. django.db.utils.OperationalError: (1071, 'Specified key was too long; max key length is 767 bytes')

    环境介绍 Django (2.1)  Python 3.5.5 mysqlclient (1.4.2.post1) Mysql 5.6.28 RHEL 7.3 在migrate时候报错 model代码 ...