第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
这是个模版以后直接拿来用即可
1 #middlewares.py文件 2 from fake_useragent import UserAgent #这是一个随机UserAgent的包,里面有很多UserAgent 3 class RandomUserAgentMiddleware(object): 4 def __init__(self, crawler): 5 super(RandomUserAgentMiddleware, self).__init__() 6 7 self.ua = UserAgent() 8 self.ua_type = crawler.settings.get('RANDOM_UA_TYPE', 'random') #从setting文件中读取RANDOM_UA_TYPE值 9 10 @classmethod 11 def from_crawler(cls, crawler): 12 return cls(crawler) 13 14 def process_request(self, request, spider): 15 def get_ua(): 16 '''Gets random UA based on the type setting (random, firefox…)''' 17 return getattr(self.ua, self.ua_type) 18 19 user_agent_random=get_ua() 20 request.headers.setdefault('User-Agent', user_agent_random) #这样就是实现了User-Agent的随即变换
1 #settings.py文件 2 DOWNLOADER_MIDDLEWARES = { 3 'Lagou.middlewares.RandomUserAgentMiddleware': 543, 4 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None, #这里要设置原来的scrapy的useragent为None,否者会被覆盖掉 5 } 6 RANDOM_UA_TYPE='random'
7-6~8 scrapy实现ip代理池
这是个模版以后直接拿来用即可
1 #middlewares.py文件 2 class RandomProxyMiddleware(object): 3 '''动态设置ip代理''' 4 def process_request(self,request,spider): 5 get_ip = GetIP() #这里的函数是传值ip的 6 request.meta["proxy"] = get_ip 7 #例如 8 #get_ip = GetIP() #这里的函数是传值ip的 9 #request.meta["proxy"] = 'http://110.73.54.0:8123' 10 11 12 #settings.py文件 13 DOWNLOADER_MIDDLEWARES = { 14 'Lagou.middlewares.RandomProxyMiddleware':542, 15 'Lagou.middlewares.RandomUserAgentMiddleware': 543, 16 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None, #这里要设置原来的scrapy的useragent为None,否者会被覆盖掉 17 }
1.sql语言取出随机记录:在此是随机取出一条记录是ip和端口组成代理IP
1 select ip,port from proxy_ip 2 order by rand() 3 limit 1
2.使用xpath选择器:
可以使用scrapy中的selector,代码如下:
1 from scrapy.selector import Selector 2 html=requests.get(url) 3 Selector=Selector(text=html.text) 4 Selector.xpath()
3.if __name__ == "__main__"问题
如果没有这个,调用时会默认运行以下命令
1 if __name__ == "__main__": 2 get_ip=GetIp() 3 get_ip.get_random_ip()
7-9 云打码实现验证码识别
验证码识别方法
- 编码实现(tesseract-ocr)
- 在线打码----打码平台(云打码、若快)
- 人工打码
7-10 cookie禁用、自动限速、自定义spider的settings
如果用不到cookies的,就不要让对方知道你的cookies--设置---COOKIES_ENABLED = False
自定义setting中的参数可以这样写:
1 #在spider.py文件中 2 custom_settings={ 3 "COOKIES_ENABLED":True, 4 "":"", 5 "":"", 6 }
作者:今孝
出处:http://www.cnblogs.com/jinxiao-pu/p/6762636.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
转载于:https://www.cnblogs.com/jinxiao-pu/p/6762636.html
第7章 Scrapy突破反爬虫的限制相关推荐
- python爬虫反爬机制_Python Scrapy突破反爬虫机制(项目实践)
对于 BOSS 直聘这种网站,当程序请求网页后,服务器响应内容包含了整个页面的 HTML 源代码,这样就可以使用爬虫来爬取数据.但有些网站做了一些"反爬虫"处理,其网页内容不是静态 ...
- Scrapy突破反爬虫的限制
7-1 爬虫和反爬的对抗过程以及策略 基本概念 爬虫:自动获取网站数据的程序,关键是批量的获取 反爬虫:使用技术手段防止爬虫程序的方法 误伤:反爬技术将普通用户识别为爬虫,如果误伤过高,效果再好也不能 ...
- Scrapy绕过反爬虫策略汇总
文章目录 一.Scrapy无法返回爬取内容的几种可能原因 1,ip封锁爬取 2,xpath路径不对 3,xpath路径出现font,tbody标签 4,xpath路径不够明确 5,robot协议 6, ...
- 【K哥爬虫普法】蓄意突破反爬虫技术,爬取牌照信息
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...
- scrapy微博反爬虫_基于Scrapy的微博爬虫设计
Data Base Technique • 数据库技术 Electronic Technology & Software Engineering 电子技术与软件工程 • 187 [关键词]Sc ...
- Scrapy应对反爬虫策略
一.设置用户代理 设置User Agent模拟浏览器,在Scrapy框架中,有四种方法设置User Agent. 1.在settings.py中·直接设置User Agent. 2.在settings ...
- Python 如何突破反爬虫指纹 JA3
这是「进击的Coder」的第 466 篇技术分享 作者:kingname 来源:未闻 Code " 阅读本文大概需要 6 分钟. " 在前几天的文章<为什么随机 IP.随机 ...
- Python requests 如何突破反爬虫指纹 JA3算法
这是「进击的Coder」的第 466 篇技术分享 作者:kingname 来源:未闻 Code " 阅读本文大概需要 6 分钟. " 在前几天的文章<为什么随机 IP.随机 ...
- “你有张良计,我有过墙梯” 几行Python代码突破反爬虫机制!
Time will tell. 1.什么是爬虫和反爬虫 爬虫是使用任何技术手段批量获取网站信息的一种方式,反爬虫是使用任何技术手段阻止别人批量获取自己网站信息的一种方式. 2.User-Agent介绍 ...
最新文章
- SystemCenter2012SP1实践(16)私有云的第一个模板
- [Reprint] 探寻C++最快的读取文件的方案
- TCP/IP协议的深入分析
- 2022,前端工具链十年盘点
- 2016-2017NBU期末考试记录
- day10-包的定义和内部类
- 扩展欧几里得算法与模乘逆元的程序
- LabView学习笔记(五):数据类型综合实验
- JavaScript实现省市选择功能,jQuery,Json
- 人工智能的现状与未来(附PPT)
- 解读|风控模型的客观认识与深入理解
- 苹果手机升级13无法开机_苹果手机更新时突然断电,手机无法开机,为什么?...
- gimp: 如何透明化背景
- 三菱服务器显示d1d2,三菱PLC指令SMOV D2 K2 K2 D1 K3详解
- winSCP 集成PuTTY附下载
- 数仓(四):数据建模:如何构建主题域/面向主题的建模
- nvcc -V和nvidia-smi中的cuda版本不同
- 两年内广州城中村全围闭 将施行“门禁”准则
- python用bbp公式求圆周率_神奇的BBP公式,可独立计算圆周率任何一位数字,曾震惊数学界!...
- 一些优秀的后端开源项目!