多线程爬虫
由于天文项目需要,我写了个爬虫去抓取了20000多张图片,一开始没有考虑到各种乱七八糟的exception,例如断网呀,url上的image已经没了呀之类的,导致爬虫会中途停掉,程序健壮性差。于是我except了requests.exceptions.ConnectionError和HTTPError,之后再判断一下status_code==200。不过奇怪的是,这样下载的图片有的还是会打不开或损坏,猜测是天文网站本身的问题,所以最后我又添加一个判断,尝试性的使用PIL的Image打开它,没有抛出IOError就可以认为图片是完好的了。
运行这个程序,着实很慢,加上一些IO操作,差不多1秒一张图片,如此一来,20000张还是要好久的,想着可不可以用多线程提高下速度。
一开始使用threading+Queue的方式,参考的这里:
最后启动多个线程去运行,最后计算时间,提高了很多,后来又写了scrapy的版本,参考的简书上的例子,速度差不了太多,之后将会试试多进程的版本。
Selenium练手
很早之前就听说了Selenium使用起来非常方便,所以花了一下午练了下手,主要用来模拟登录武大图书馆,并选择常用座位:
这里值得注意的几点是:选择开始时间的时候,源码中js是停顿了一会加载的,所以我们这里在点击了位置之后,需要休眠一下等待开始时间加载出来;其次,这里的结束时间是根据选择的位置和开始时间参数,通过ajax动态访问的,我原本想着直接用selenium去访问ajax访问的页面,再返回来,结果发现没什么用,效果不佳,于是在这里用requests拿到ajax访问后返回的结果,选取结束时间。
抢座位的部分一直也没有测试,因为呆在实验室,也没怎么去图书馆了….