笔记

冻葱的Python学习笔记03-用selenium扒取自招名单

发布于 2018 年 5 月 9 日

今天放学后照例来到了机房查一下看看山东大学(sdu)的自招初审名单有没有发布,然后惊喜的发现——巨慢无比的山东大学终于发布了他的自招初审名单!然后我就想知道,濮阳一高除了我们几个OIer之外,还有没有其他的同学也通过了自招呢?正好前几天了解到了一些python的第三方库,所以就趁热(现学现卖)想撸个扒名单的爬虫(估计根本称不上)。

使用了selenium库的webdriver,是通过模拟用户操作来实现自动化过程的一个库。所以就是一简单的模拟,所以很快就撸了出来。

思路就是进入网页后查找网页内的<tr>标签,然后吧<tr>标签内的<td>元素都打印到输出文件里。然后再检查有没有下一页,如果有就下一页继续,如果没就是到底儿了,返回就可以。所以就写了个递归,这样可以避免每次换学校的时候手动输入页数之类的。

但是还是出了一些小问题。比如我还并不会输出到xls文件里,所以就只能打印到txt文件里,再靠复制的笨方法得到一个xls表格。稍微搜索了一下,好像直接操作xls需要再安装一个第三方库,时间原因,还是使用了笨方法,以后再弄个xls版本。

第二个小问题是,因为未知原因,在扒到第四页时,会突然抛出异常并停止运行。搜了一下,在打开文件的时候强制了一下编码,然后就可以正常运行了,问题大概算是解决了。

另外一个比较难受的问题是——在扒到最后一页,没有找到下一页按钮时,程序也会抛出异常并且停止运行。虽然并不会造成什么不良影响,但是脚本最底下的关闭文件语句不会被执行。这个时候如果直接关掉shell和浏览器的话,辛苦扒下来的数据就付诸东流咯。所以要在抛出异常的shell页面手动再输入一行out.close(),然后关闭页面即可。

过程

1.首先是安装python的第三方库selenium,因为我们要用到这个神奇的库。在selenium的官网下载好这个库的压缩包,然后解压这个tar.gz,放到一个能写出来名字的路径(本例中放在了D:\selenium-3.11.0\)然后打开命令行,移动到这个路径,并进行安装——

2.如果你使用的浏览器是chrome,那么请下载对应版本的chromedriver.exe用来自动化操作chrome。

3.然后就是编写代码了,这里贴上我的Ver.1,即输出txt并且需要在最后手动out.close()的版本——

4.跑一下,完成~

笔记

    1. 隐式等待:driver.implicitly_wait( time ) 这个函数会一直等待加载完成或者时间结束(单位秒)但是如果页面中动态元素过多,可能返回加载完成的时候并没有加载完毕,这时候需要配合显式等待一起使用。
    2. open()中的编码设置:即上述代码中的encoding = ‘utf-8’,这样可以避免一些奇怪的问题。
    3. css选择器的使用:很的很好用!比xpath好用!(逃)

Ver. 2 输出xls的版本

经过我的一番搜索,决定使用xlrd和xlwt两个库来输出到xls。和selenium一样,下载解压之后,在命令行内运行 python setup.py install 就可以使用这个库咯。

输出xls使用xlwt,这个库使用xls = xlwt.Workbook()来创建一个xls,使用new_sheet = xls.add_sheet( sheet_name )来创建一个新的表,写入内容则使用了new_sheet( row, col, label = ”)操作,最后在来一个xls.save( file_name )保存文件,完成~

不过和之前的代码不同的是,需要多出两个参数来控制行和列,所以简单修改了一下——当然,肯定会有更好的方法啦~

上代码:

不过还是有需要在最后一页抛出异常之后手动输入outxls.save(‘somename.xls’)的毛病,算了,能用就行。就当是自定义文件名的功能了(逃)

以上就是冻葱的第三次python学习笔记。
冻葱要加油高考咯~最后冲刺!

来一发吐槽