第7章 Scrapy突破反爬虫的限制
7-1 爬虫和反爬的对抗过程以及策略
Ⅰ、爬虫和反爬虫基本概念
- 爬虫:自动获取网站数据的程序,关键是批量的获取。
- 反爬虫:使用技术手段防止爬虫程序的方法。
- 误伤:反爬虫技术将普通用户识别为爬虫,如果误伤过高,效果再高也不能用。
- 成本:反爬虫需要的人力和机器成本。
- 拦截:成功拦截爬虫,一般拦截率越高,误伤率越高。
Ⅱ、反爬虫的目的
- 初级爬虫----简单粗暴,不管服务器压力,容易弄挂网站。
- 数据保护
- 失控的爬虫----由于某些情况下,忘记或者无法关闭的爬虫。
- 商业竞争对手
Ⅲ、爬虫和反爬虫对抗过程

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 云打码实现验证码识别
验证码识别方法
- 编码实现(tesseract-ocr)
- 在线打码----打码平台(云打码、若快)
- 人工打码
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突破反爬虫的限制的更多相关文章
- Python Scrapy突破反爬虫机制(项目实践)
对于 BOSS 直聘这种网站,当程序请求网页后,服务器响应内容包含了整个页面的 HTML 源代码,这样就可以使用爬虫来爬取数据.但有些网站做了一些“反爬虫”处理,其网页内容不是静态的,而是使用 Jav ...
- Scrapy突破反爬虫的限制
随机切换UserAgent https://github.com/hellysmile/fake-useragent scrapy使用fake-useragent 在全局配置文件中禁用掉默认的UA,将 ...
- Scrapy爬取美女图片第四集 突破反爬虫(上)
本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...
- 自动更改IP地址反爬虫封锁,支持多线程(转)
8年多爬虫经验的人告诉你,国内ADSL是王道,多申请些线路,分布在多个不同的电信机房,能跨省跨市更好,我这里写好的断线重拨组件,你可以直接使用. ADSL拨号上网使用动态IP地址,每一次拨号得到的IP ...
- 深入细枝末节,Python的字体反爬虫到底怎么一回事
内容选自 即将出版 的<Python3 反爬虫原理与绕过实战>,本次公开书稿范围为第 6 章——文本混淆反爬虫.本篇为第 6 章中的第 4 小节,其余小节将 逐步放送 . 字体反爬虫开篇概 ...
- Python Scrapy反爬虫常见解决方案(包含5种方法)
爬虫的本质就是“抓取”第二方网站中有价值的数据,因此,每个网站都会或多或少地采用一些反爬虫技术来防范爬虫.比如前面介绍的通过 User-Agent 请求头验证是否为浏览器.使用 JavaScript ...
- 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图
第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...
- 二十四 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图
1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图
- scrapy反反爬虫
反反爬虫相关机制 Some websites implement certain measures to prevent bots from crawling them, with varying d ...
随机推荐
- C# SQLite 数据库
数据库 Oracle.Oracle的应用,主要在传统行业的数据化业务中,比如:银行.金融这样的对可用性.健壮性.安全性.实时性要求极高的业务 MS SQL Server.windows生态系统的产品, ...
- win10下安装配置iis,发布iis
老有朋友不会配置iis跟发布iis,今天整理一下,欢迎参考借鉴 打开控制面板 找到 程序 点击程序 找到启用或关闭windows功能 在windows服务中找到 Internet Informati ...
- sql游标循环结果集
我们知道游标是一种对结果集操作的神器,使用游标,可以很方便的循环结果集,并对结果集进行数据处理. 1.建表 CREATE TABLE [dbo].[Student]( ,) NOT NULL, ) N ...
- [UWP开发]在windows10中设置壁纸~UserProfilePersonalizationSettings
在之前的wp8.1和wp8中,微软没有公开设置壁纸的API,只有一个设置锁屏的API,但在Windows10中,微软为我们提供了设置壁纸的API:TrySetWallpaperImageAsync,他 ...
- LESS+to+MCSS
此文已由作者郑海波授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 一.前言 虽然首页没有开始做,昨天仍决定将[MCSS](https://github.com/NetEaseW ...
- WPF 内部Template 动画板 无法冻结此 Storyboard 时间线树供跨线程使用
解决此问题,需要一定的想象力. 换个思路即可 大体是 使用Tag或者别无用的可以输入数值的属性,或者附加属性也可以的.来绑定到你要动画的属性 当然这个过程中要使用转换器了 我给出一个关于Button ...
- NOI2019省选模拟赛 第六场
传送门 又炸了-- \(A\) 唐时月夜 不知道改了什么东西之后就\(A\)掉了\(.jpg\) 首先,题目保证"如果一片子水域曾经被操作过,那么在之后的施法中,这片子水域也一定会被操作&q ...
- 使用memcache或redis限制某个用户或者某ip用户一段时间内最大投票次数
实现每个用户在某网站10分钟内最多投票5次 function isFrequently($key){ $t = 60*10; $n = 5; $mem = new Memcache(); $mem-& ...
- [ActionScript3.0] 使用FileReferenceList处理多个文件上载
package { import flash.display.Sprite; import flash.events.DataEvent; import flash.events.Event; imp ...
- mybatis pagehelper多数据源配置的坑
我用spring boot配置了2个数据源的工程用来同步不同库的数据,发现如果配置成如下格式报错 #分页配置pagehelper: helper-dialect: mysql reasonable: ...