端午节假期过了,以前一直在作出行准备,后面旅游完又休息了一下,最近才恢复状态。html
端午假期最后一天收到一个快递,回去打开,发现是微信抽奖中的一本书,黄永祥的《实战Python网络爬虫》。java
去各大网站搜了一下这我的,没有名气,去网购平台看了他别的书的书评,总体来讲,书都是拼凑的。。。python
可是既然书到手了,不妨翻开看看,恰好最近没有什么头绪,又偏头痛。花了几个半天总体翻了一下这本书,感受是有点浅显的。ajax
我以前用java写过爬虫,感受比较难的仍是反爬虫这块。这本书,我先看了第一个实战项目,51job的,运行了代码以后发现,哦,好吧,这个网站,貌似没有反爬虫机制?正则表达式
其实具体的爬取内容的方法各个网站也是差很少的。主要仍是反爬虫这块。可是书上内容很少,只有一个章节。redis
我的以为,对于爬虫新手,看一看每章的小结,仍是很能增加一些见识的。更深刻的技术,大概这本书是不能提供的。sql
后续有时间,我大概会摘录一些小结放到这里来吧~虽然没什么人看这里。数据库
网络爬虫
定义:自动抓取网络信息浏览器
分类:缓存
- 通用网络爬虫/全网爬虫:主要为门户站点搜索引擎和大型网站服务采集数据
- 聚焦网络爬虫/主题网络爬虫:选择性地爬取主题相关的页面
- 增量式网络爬虫:对已下载网页采起增量式更新/只爬取新产生或已经发生变化的网页
- 深层网络爬虫:内容不能经过静态URL获取/隐藏在搜索表单后/只有用户提交一些关键词才能得到的页面
网站分析
- 找出数据来源:Doc、XHR、JS
- 找出数据所在请求,分析请求连接、请求方式、请求参数
- 肯定参数来源:固定可选值、经过别的请求生成、通过JS处理、特殊值
抓包工具:Fiddler
爬虫库:
- urllib
- requests:语法简单,兼容python2和3
- requests_html:提供了数据清洗、ajax数据动态渲染
爬虫缓存:requests_cache
requests_cache.install_cache(backend='memory')
存储机制:
- memory:每次程序运行都会将缓存以字典形式保存在内存中
- sqlite:默认存储机制
- redis:经过redis模块实现数据库的读写
- mongo:经过pymongo模块实现数据库的读写
网页操控与数据爬取Selenium
手机App数据爬取Appium
验证码识别
- 人工识别
- ocr
- 调用第三方平台API:在线人员、人工智能
数据清洗
- 字符串操做:截取、替换、查找、分割
- 正则表达式
- 第三方模块/库BeautifulSoup
分布式爬虫
并发库concurrent.futures:ThreadPoolExecutor和ProcessPoolExecutor
反爬虫技术
- 基于用户请求的Headers→固定属性+可变属性
- 基于用户操做网站的行为→代理IP
- 基于网站目录数据加载→模拟ajax请求
- 基于数据加密
- 基于验证码识别
- 基于请求参数
- 基于cookies→构建cookies池、代理IP、动态构建cookies、利用浏览器获取cookies