python编写知乎爬虫实践

前端狗

2019/09/18 发布于 技术 分类

文字内容
1. 程柳锋 2017.7.12 PYTHON编写知乎爬⾍实践
2. 个⼈介绍 ▸ 2014.12~2017.2 淘宝,闲⻥鱼拍卖 ▸ 2017.2 ~ ⾄至今 腾讯,Now直播 ▸ 博客:http://www.cnblogs.com/cpselvisGithub: https://github.com/cpselvis
3. 开篇 分享⼤纲 ▸ 爬⾍虫⼯工作原理理 ▸ ⽹网⻚页抓取、去重、解析和存储相关技术栈 ▸ Bloom Filter算法介绍 ▸ 使⽤用redis queue实现⼤大规模⽹网⻚页抓取 ▸ 反爬⾍虫策略略及应对措施 ▸ QA
4. 第⼀部分:爬⾍⼯作原理 从种⼦URL获取HTML源代码说起
5. 第⼀部分:爬⾍⼯作原理 DEMO解释 news.qq.com 析 qq.com 下载 qq.com 源代码 解 解析 解析 解析 pp.qq.com v.qq.com 解析 ent.qq.com 下载 下载 news.qq.com 源代码 pp.qq.com 源代码 下载 下载 …… fashion.qq.com 下载 …… fashion.qq.com 源代码 ……
6. 第⼀部分:爬⾍⼯作原理 引⼊URL队列模型 qq.com 加⼊入 待抓取URL 读取任务队列列 当前任务url 任务队列列 下载 加⼊入 当前任务url 对应源码 解析 多个 新任务url
7. 第⼀部分:爬⾍⼯作原理 通俗易懂的伪代码
8. 第⼀部分:爬⾍⼯作原理 爬⾍的基本流程总结 读取url DNS解析 加⼊入 种⼦URL 待抓取的URL 任务队列 新解析的url ⽹网⻚页下载 已执⾏行行的url 已抓取的URL 任务队列 ⽹页内容 ⽹网⻚页解析 有⽤信息 存储
9. 第⼀部分:爬⾍⼯作原理 爬⾍的抓取策略 ▸ 深度优先策略略 ▸ ⼴广度优先策略略
10. 第⼀部分:爬⾍⼯作原理 复杂点的例⼦:图⽚抓取程序
11. 第⼆部分:⽹页抓取、去重、解析和存储相关技术栈 技术栈 ▸ ⽹网⻚页抓取:urllib2、urllib3、requests ▸ 去重:set、Bloom Filter ▸ 解析:re、XPath、BeautifulSoup ▸ 存储:MySQL、Mongodb、Redis ▸ 并发抓取:rq、scrapy、celery、thread、multiprocess
12. 第三部分:布隆过滤器 ⼏个⽐较常见的例⼦ ▸ 字处理理软件中,需要检查⼀一个英语单词是否拼写正确 ▸ 在 FBI,⼀一个嫌疑⼈人的名字是否已经在嫌疑名单上 ▸ 在⽹网络爬⾍虫⾥里里,⼀一个⽹网址是否被访问过 ▸ yahoo, gmail等邮箱垃圾邮件过滤功能
13. 第三部分:布隆过滤器 如何判断⼀个元素是否存在⼀个集合中? ▸ 数组 ▸ 链表 ▸ 树、平衡⼆二叉树 ▸ Trie ▸ 哈希表
14. 第三部分:布隆过滤器 哈希函数 ▸ 将任意⼤大⼩小的数据转换成特定⼤大⼩小的数据的函数 ▸ 转换后的数据称为哈希值或哈希编码 ▸ 特点: ▸ 如果两个散列列值是不不相同的(根据同⼀一函数), 那么这两个散列列值的原始输⼊入也是不不相同的 ▸ 不不同的输⼊入可能对应相同的输出(哈希碰撞)
15. 第三部分:布隆过滤器 哈希表 ▸ 根据关键码值(Key value)⽽而直接进⾏行行访问的数据结构 ▸ 拉链法解决哈希冲突
16. 第三部分:布隆过滤器 使⽤哈希表存储⼀亿 个垃圾 EMAIL 地址的消耗? ▸ 哈希函数将⼀一个email地址映射成8字节信息指纹 ▸ 哈希表存储效率通常⼩小于50%(哈希冲突) ▸ 消耗的内存:8 * 2 * 1亿 字节 = 1.6G 内存
17. 第三部分:布隆过滤器 布隆过滤器(BLOOM FILTER) ▸ 巴顿.布隆隆于⼀一九七零年年提出 ▸ ⼀一个很⻓长的⼆二进制向量量 (位数组) ▸ ⼀一系列列随机函数 (哈希) ▸ 空间效率和查询效率⾼高 ▸ 有⼀一定的误判率(哈希表是精确匹配)
18. 第三部分:布隆过滤器 布隆过滤器的实现要求 ▸ ⻓长度为m的位数组 ▸ k个独⽴立的良好的哈希函数 ▸ 均匀的随机分布 ▸ 哈希冲突低 ▸ k远⼩小于m ▸ m和容纳的元素之间存在⽐比例例 ▸ m 和 k的值取决于误判率
19. 第三部分:布隆过滤器 直观的描述
20. 第三部分:布隆过滤器 布隆过滤器添加元素 ▸ 将要添加的元素给k个哈希函数 ▸ 得到对应于位数组上的k个位置 ▸ 将这k个位置设为1
21. 第三部分:布隆过滤器 布隆过滤器查询元素 ▸ 将要查询的元素给k个哈希函数 ▸ 得到对应于位数组上的k个位置 ▸ 如果k个位置有⼀一个为0,则肯定不不在集合中 ▸ 如果k个位置全部为1,则可能在集合中 误判率存在的原因
22. 第三部分:布隆过滤器 布隆过滤器⾼效的原因 ▸ 普通数据结构都存取元素 ▸ Bloom filter只需存取要⼀一个位数组 ▸ 查询效率O(k)
23. 第三部分:布隆过滤器 布隆过滤器的简单实现
24. 第四部分:使⽤REDIS QUEUE实现⼤规模⽹页抓取 消息队列-⽣产者消费者模式介绍 ▸ 元素:⽣生产者、消费者、任务队列列 ▸ 调度:round-robin、权重调度 ▸ 消息ack确认 C P C C
25. 第四部分:使⽤REDIS QUEUE实现⼤规模⽹页抓取 rq⽰例 my_module.py ⼯工具函数 worker.py 后台执⾏行行进程 main.py 主⼊入⼝口
26. 第四部分:使⽤REDIS QUEUE实现⼤规模⽹页抓取 截图
27. 第五部分:反爬⾍策略及应对措施 常见站点爬⾍攻防 ▸ ⽤用户代理理检测: 通过设置User-Agent header ▸ Referer检测: 通过设置Referer header ▸ 登陆限制:通过模拟登陆解决 ▸ 访问频率限制: ▸ 同⼀一账号的频率限制,则可以使⽤用多个账号轮流发请求 ▸ 如果针对IP,可通过IP代理理池
28. 第五部分:反爬⾍策略及应对措施 各种浏览器的user-agent ▸ IE 8: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ▸ IE 7: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2) ▸ IE 6: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) ▸ chrome: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ 59.0.3071.115 Safari/537.36 ▸ safari: ”Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/ 602.2.14"
29. 第五部分:反爬⾍策略及应对措施 ⽹站反“反盗链” ▸ referer:⽤用于告知服务器器⽤用户的来源⻚页⾯面 ▸ 某些站点会检测是否存在referer ▸ 资源站点反盗链
30. 反爬⾍策略及应对措施 代理IP池
31. Thanks for attending.