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. “全栈2019”Java异常第二章:如何处理异常?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  2. LOJ#162. 快速幂 2(分块)

    题面 传送门 题解 orzljz 我们分块,设\(s=\sqrt{p}+1\),那么\(x^a\)可以拆成\((x^s)^{a/s}\)和\(x^{a\bmod s}\),\(O(s)\)预处理,\( ...

  3. PHP全局变量与SESSION 漏洞(global 与 session)

    先看这一段简单的代码 <?php session_start();$_SESSION[‘isadmin’]=’yes’;$isadmin=’no’;echo $_SESSION[‘isadmin ...

  4. css效果小计

    在工作学习中总能发现一些新鲜的页面效果可以用不同的css完成,在这里将遇到的一些css做下记录,以便日后翻阅,如果其中的写法不对,或者有更优写法欢迎留言,不胜感激 1.关于用一个div做出双边框(由于 ...

  5. C#-WebForm-光棒效果

    <script type="text/javascript"> //获取Repeater的每一行 var oItems = document.getElementsBy ...

  6. QuantLib 金融计算——收益率曲线之构建曲线(2)

    目录 QuantLib 金融计算--收益率曲线之构建曲线(2) YieldTermStructure 问题描述 Piecewise** 分段收益率曲线的原理 Piecewise** 对象的构造 Fit ...

  7. Java导包问题

    eclipse中,导包只可以导到当前层,不可以再导入包里面的包中的类 包目录如下: 导包如下 package def; import abc.*; public class CCC { public ...

  8. 升级vue-cli为 cli3 并创建项目

    一.升级npm install -g @vue/cli 二.创建项目 1.vue  create vue3-project 下面会提示让你配置下自己想要用到的功能,然后它会自动帮你安装,这个看自己需求 ...

  9. 关于 maven 打包直接运行的 fat jar (uber jar) 时需要包含本地文件系统第三方 jar 文件的问题

    关于maven打包fat jar (uber jar) 时需要包含本地文件系统第三方jar文件的问题,今天折腾了一整天.最后还是用了spring boot来做.下面是几篇关于打包的有参考价值的文章,以 ...

  10. 单独安装VS2012装mono for android

    直接安装个SQL Server2012,然后就可以单独安装VS2012 来用mono for android了.如果不想装,那就装以下这些东西. 广州-PC286() 11:05:28 和 x86  ...