爬虫的定义与应用
网络爬虫(web crawler),是一种用来自动浏览万维网的网络机器人, 因其工作原理向在网上不停工作的蜘蛛而得名。
- 搜索引擎的根基
- 构建机器学习的数据集
- 搜集万维网上的指定数据
爬取
服务端渲染
-
客户端渲染
通过抓包工具截取Ajax请求
- 使用浏览器渲染工具模拟浏览器执行
通过正则表达式提取隐藏在HTML中的JavaScript变量
增量爬取
单页内容的变化,不断抓取监控页面的信息,并与原来的信息作比较后跟新。
- 数量的变化
- 顺序可控,可以通过记录最后一次抓取地址,下一次从记录处开始抓取。
- 顺序不可控,一般会通过数据库后者布隆过滤器将网站存储下来,爬取时通过对比判断是否要爬取。
解析
基于模板方法
- 正则表达式
- XPath
- CSS Selector
-
基于统计学
基于HTML的tag判断
- Readability: https://blog.csdn.net/cqcre/article/details/100681678
-
基于机器学习
- https://blog.csdn.net/weixin_29146599/article/details/116161513
- https://blog.csdn.net/wade1203/article/details/101185144
存储
- 文件
- 数据库
- 搜索引擎
- 云存储
防反爬
- robots.txt 参数说明
- 判断是否为浏览器
- 识别HTTP的headers中有没有user-agent
- 登录
- Cookies池
- IP封禁
- 代理IP池
- ADSL网络
各种验证码
- OCR
- 模拟浏览器拖拽
- 打码平台 https://zhuanlan.zhihu.com/p/24011861
爬虫的风险
骚扰问题:通过计算机的快速访问,通常网站通过人数来约定他的访问能力,例如爬虫每秒钟爬取几十万字的资源,服务器无法提供这种能力,网络爬虫可能会为web网站巨大的资源开销。
法律风险:服务器上的数据有产权归属,网络爬虫获取数据后牟利将带来法律风险。
如何规避风险
严格遵守网站设置的robots协议;Robots协议属于“君子协议”,但是大部分人都会资源遵守。网站根目录下如果存在robots.txt,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。
- 在规避反爬措施的同时优化自己的代码,避免给被访问网站造成干扰;
- 在使用、传播抓取到的信息时,应审查所抓取的内容,如发现属于用户的个人信息、隐私或者他人的商业秘密的,应及时停止并删除。
加速
- 多线程和多进程
- 异步IO
- 分布式
- 其他
- DNS缓存
- 更加高效的去重策略
参考:
万维网的蝴蝶结形状
Python网络爬虫与信息提取
如何入门爬虫
八爪鱼爬虫平台
高效网络爬虫
Python网络爬虫知识点总结
网络爬虫基础.pptx