1 爬虫工程师是干嘛的?
1.1 主要工作内容
爬虫工程师的主要工作内容是获取数据,获取互联网上的数据。
数据的来源:
- 用户产生的(UGC)
- 通过爬虫爬取
1.2 爬虫能做什么?
- 数据聚合类网站需要爬虫,如google搜索,网盘搜索引擎,种子搜索引擎
- 信息对比网站,如比价类网站,优惠券网站
- 个人效率提升,如爬取网上的图片,备份资料
2 爬虫工程师需要掌握哪些技能?
2.1 至少一门编程语言
推荐python和java
2.2 任务队列
将计划抓取的网页都放在任务列表,然后worker从队列中一个一个执行,如果失败,记录一下,然后执行下一个。
常用的任务队列:
2.3 数据库
数据保存可以有如下三种方式:
- 数据库
- json
- csv
推荐使用NoSQL数据库,如mongoDB;原因是,爬虫抓到的数据是键-值对应关系,有些字段有,有些字段没有,数据关系比较弱,很少用到表-表关系
2.4 HTTP知识
- html文档的解析方法 - xpath
- HTTP协议
- 浏览器工具 - Developer Tools Chrome, copy as curl 功能
2.5 运维工作
爬虫写好后需要监控实际运行的情况,涉及到爬虫的日志系统和数据量的统计,爬虫的运维有以下3个思路:
- 数据增量监控:
定向爬虫(只针对一个网站的爬虫),主要看数据的增加的趋势;非定向爬虫的数据增量不是很稳定,需要看机器的网络状况 - 爬虫执行的成功情况:
对一次爬虫执行进行日志,将执行的时间,状态,目标url,异常放入日志系统,通过可视化手段查看爬虫的失败率 - 爬虫抛出Exception:
错误日志的收集
3 爬虫与反爬策略
3.1 访问频率
访问太频繁,会被封锁IP
3.2 登录限制
通常模拟用户的登录方式,加cookie
3.3 通过Header封杀
访问时加上Header
3.4 JavaScript脚本动态获取网站数据
有一些网站(尤其是单页面网站)的内容并不是通过服务器直接返回的,而是服务器只返回一个客户端JavaScript程序,然后JavaScript获取内容。更高级的是,JavaScript在本地计算一个token,然后拿这个token来进行AJAX获取内容。而本地的JavaScript又是经过代码混淆和加密的,这样我们做爬虫的通过看源代码几乎不可能模拟出来这个请求(主要是token不可能破解)
使用headless浏览器,运行这个客户端程序,来100%模拟真实用户
3.5 验证码
比较复杂,通过机器学习,图像识别来破解
3.6 IP限制
永久封杀IP,使用代理池的方式作为爬虫的标配,或者高匿代理
3.7 网站内容反爬
将网站内容改为图片显示,但是可以通过OCR识别来解决