最近实习写了两个爬虫,使用的工具是requests , bs4, selenium + PhantomJS, 这里写一些总结。
1.ajax
通常可以通过分析js文件,找到数据接口,可以直接获取到数据
2.正则表达式re
获取到的json数据格式为:jQuery1910981251106322391_1517453911085({…})就需要用正则表达式来解析数据
3.验证码识别
最普通的思路为:分割图片,灰度二值化转为黑白,与预留图片计算向量
参考:https://www.shiyanlou.com/courses/364
4.登录 session
requests库有Session对象,会在同一个 Session 实例发出的所有请求之间保持 cookie
5.浏览器渲染,使用selenium + PhantomJS,
注意selenium版本要大于2,小于3,因为3以上不支持PhantomJS,PhantomJS安装最好采用源码安装,apt-get得到的版本功能并不全
6.断点重续
断点通常是因为网络请求失败,失败的原因通常为以下几种:
(1)超时
(2)连接太多
(3)selenium
超时通常是因为在requests设置了timeout,
连接太多可以在headers中指定connection:close,
selenium请求出错暂时原因未知。
考虑使用这样的代码:
html = ''
while html == '':
try:
html = requests.get('')
except Exception:
html = ''
continue
7.动态IP
有些网站会封IP,需要使用代理,建议可以使用阿布云的代理,使用过感觉还可以,价格略贵,接入可以看接入指南。
8.多线程同步问题
多线程同时读写Excel,会出现乱序问题,可以考虑这样处理,先让多线程将获取到的数据序列化为pkl文件,达到100条后,然后再由另一线程写入到Excel表中。