初级爬虫工程师:
- Web前端的知识:HTML, CSS, JavaScript, DOM, DHTML, Ajax, jQuery,json等;
- 正则表达式,能提取正常一般网页中想要的信息,比如某些特殊的文字,链接信息,知道什么是懒惰,什么是贪婪型的正则;
- 会使用re, BeautifulSoup,XPath等获取一些DOM结构中的节点信息;
- 知道什么是深度优先,广度优先的抓取算法,及实践中的使用规则;
- 能分析简单网站的结构,会使用urllib,urllib2或requests库进行简单的数据抓取;
中级爬虫工程师:
- 了解什么是Hash,会使用简单的MD5,SHA1等算法对数据进行Hash以便存储;
- 熟悉HTTP,HTTPS协议的基础知识,了解GET,POST方法,了解HTTP头中的信息,包括返回状态码,编码,user-agent,cookie,session等;
- 能设置User-Agent进行数据爬取,设置代理等;
- 知道什么是Request,什么是Response,会使用Fiddle, Wireshark等工具抓取及分析简单的网络数据包;对于动态爬虫,要学会分析Ajax请求,模拟制造Post数据包请求,抓取客户端session等信息,对于一些简单的网站,能够通过模拟数据包进行自动登录;
- 对于比较难搞定的网站,学会使用phatomjs+selenium抓取一些动态网页信息;
- 并发下载,通过并行下载加速数据抓取;多线程的使用;
高级爬虫工程师:
- 能使用Tesseract,百度AI等库进行验证码识别;
- 能使用数据挖掘的技术,分类算法等避免死链等;
- 会使用常用的数据库进行数据存储,查询,如Mongodb,Redis(大数据量的缓存)等;下载缓存,学习如何通过缓存避免重复下载的问题;Bloom Filter的使用;
- 能使用机器学习的技术动态调整爬虫的爬取策略,从而避免被禁IP封号等;
- 能使用一些开源框架Scrapy,Celery等分布式爬虫,能部署掌控分布式爬虫进行大规模的数据抓取;
网站如何发现爬虫
一般来说,网站会有以下一些简单的策略发现爬虫程序:
1)单一IP非常规的访问频次;
2)单一IP非常规的数据流量;
3)大量重复简单的网站浏览行为,只下载网页,没有后续的JS,CSS请求;
5)通过一些陷阱来发现爬虫,例如一些通过CSS对用户隐藏的链接,只有爬虫才会访问;
网站如何进行反爬
一般来说网站会采用下面两个简单的策略来防止爬虫:
1.大量使用动态网页,是的爬虫的爬取难度增加,重要数据都拿不到,即使爬虫采用了Web环境来渲染(内置浏览器),也会大大增加爬虫的负担和爬虫时间;(当然,采用动态加载的技术,对服务器的负担也会大大减轻)
2.基于流量的拒绝:
开启带宽限制模块,限制每个IP最多连接数,最大带宽等;
爬虫如何发现自己可能被网站识别了
如果爬取过程中出现以下情况,那么小心了,你的爬虫可能被网站发现了:
1.验证码出现;
2.Unusual content delivery delay 非常规的延时;
3.Frequent response with HTTP 403, 404, 301 or 50x error;
爬虫应对反爬的策略
我们可以从以下几个方面来考虑应对反爬:
1)User-Agent池;
2)代理服务器池;
3)CookieJar等的管理;
4)协议的细节考虑,如:需要大量的实践经验总结的
抓取数据时不处理CSS,JS等;
nofollow属性;css的display属性;探测陷阱;
验证refer locator等;
5)使用分布式的多机策略;爬慢点,把爬虫放到访问频繁的主站IP子网下,如教育网;
6)使用了规则来批量爬取,需对规则进行组合;
7)验证码的搞定:机器学习,图像识别;
8)尽可能遵守Robots协议
Scrapy是基于Twisted(竞争对手Tornado)异步网络框架,Scrapy的组件及架构图如下:
Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
Scheduler(调度器): 它负责接受引擎发送过来Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理。
Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。
Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。
Downloader Middlewares(下载中间件):可以当作是一个可以自定义扩展下载功能的组件。
Spider Middlewares(Spider中间件):可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses; 和从Spider出去的Requests)
代理服务器地址:https://www.kuaidaili.com/ops/
关于Cookie的更详细信息,可以参看: https://www.w3cschool.cn/pegosu/skj81ozt.html
可以引用CookieJar;解决过期问题
估算网站的大小
可以使用搜索引擎来做,比如在百度中使用site:www.zhihu.com
识别网站用了何种技术
为了更好的了解网站,抓取该网站的信息,我们可以先了解一下该网站大致所使用的技术架构。
安装builtwith :
Windows: pip install bulitwith
Linux: sudo pip install builtwith
使用:在Python交互环境下,输入:
import builtwith
builtwith.parse("http://www.sina.com.cn")
寻找网站的所有者
有时候,我们需要知道网站的所有者是谁,这里在技术上有个简单的方法可以参考。
安装python-whois :
Windows: pip install python-whois
使用:在Python交互环境下,输入:
import whois
whois.whois("http://www.sina.com.cn")