对爬虫的学习也有一段时间了,但由于要应付校内实习和秋招大潮,爬虫学习的进度也有所停滞。在校内实习期间抽空看了下scrapy的视频教程,对用scrapy开发爬虫也有了一定的了解,自己也尝试“套用”scrapy进行了一些爬取工作,其中也包括使用scrapy进行Bangumi的爬取,但对其中的Rule规则、异步读写数据库、middleware中间件的使用等地方还是不求甚解。在读到知乎上某大大的eh爬虫后,决定参照其模式将Bangumi爬虫重写一遍,整理成一个独立的、架构相对完整的爬虫程序。
程序构成
爬虫程序主要分为四个部分:代理获取get_proxy.py、目录获取get_url.py、内容获取get_content.py、数据库写入sql_work.py。
主程序main.py启动后生成两个队列url_queue与data_queue用于保存待爬取的url与已经爬取完成的页面数据data,同时启动一个目录获取线程,PROCESS_MAX个内容获取进程,1个数据库写入线程,
代理获取
该部分依赖于github上的开源项目IPProxyPool
,下载后运行其中的IPProxy.py文件,通过对127.0.0.1:8000进行访问便能获取稳定健壮的代理ip。该部分包含了ip代理能否到达Bangumi的测试与对无效ip的删除。
目录获取
从Bangumi的动画排行页面往后进行翻页即可获取所有收录的动画的链接集合,当翻页后发现获取的集合为空时判断已经获取了所有的动画详情链接。获取的动画详情链接加入到url_queue队列中。