1、在python方面的爬虫领域,有一个很强大的集成化、开源的工具,叫 scrapy,做这个小项目之前稍微试用了一下,本来只是想尽快完成这个小项目,但scrapy还是有点深,所以并没有实际掌握,倒是接触到了里面一个很强大的正则工具,xpath,摆脱了学正则化表达式的痛苦
2、整个项目就是一些小模块的累加,也是不断摸索的过程。
3、一开始,使用urllib以及urllib2初探模拟浏览器发送请求的过程当中,由于对cookie机制的不了解,犯下了一个比较严重的错误:
学校具体的课程数据是由 学期->学院->课程信息 这样的结构组成的,为了爬取到所有的数据就得从一开始的学期开始抓取数据,所以就得每一层的链接都要访问,这样cookie才能够正确,不会出现404等问题。我一开始直接将chrome里面的cookie数据直接封装到了请求的头里面,从而造成了很大的错误。
4、字符集问题。由于一开始没有考虑到字符集相关的问题,所以经常会出现乱码或者xpath无法进行正则,后来开始使用gb2312(因为网页的头当中的 charset 为gb2312),但仍然会在编码方面出错
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 1771-1772
于是改正为gbk编码,但仍然报错,因为数据当中有不少是学生的姓名,姓名当中居然出现了“䶮”(yan 第三声)这样的字,而gbk编码无法支持,后来去查阅了 百度百科 以及 python的官方文档 才深刻的认识到了中国的文字真的是太多了,最后挑选了目前python能够支持的最大的字符集’gb18030',才差不多解决了问题。
当然,如果对数据的完整性要求没有太严格,可以考虑使用'ignore'参数:
#全部转换为utf-8
data = data.decode('gb18030').encode("utf-8")
content = data.decode('utf-8')
a、首先,最好将python作为全局使用的命令(windows下),需要修改 PATH 环境变量,将Python的可执行程序及额外的脚本添加到系统路径中。将以下路径添加到PATH 中:
$安装目录:\Python2.7\;$安装目录:\Python2.7\Scripts\;
然后打开命令行窗口,并且运行以下命令来修改 PATH :
$安装目录:\Python27\python.exe $安装目录:\Python27\tools\scripts\win_add2path.py
关闭命令行窗口之后,重新打开,输入以下命令,确认可以输出python的版本号:
python --version
b、最好有安装pip,它是一个类似于linux那种管理所有python所有包的工具,可以在 这儿以及 这儿获取到,下载完成之后,用命令行进入到存放的目录,运行命令:
python get-pip.py
即可安装完成pip
c、在命令行窗口任意目录输入以下命令:
pip install lxml
就可以安装完成xpath,以后如果需要其他的库,如chardet等等,都可以输入类似的命令进行安装
6、因为很多xpath的结果当中有空格以及回车(主要是因为学校的网页上面有太多莫名其妙的回车),所以需要将这些东西去除,从而让数据更好看一点,可以使用正则等方法,以下是找到的一个解决方案:
a = ' 123123 '
a = "".join(a.split())
#结果为
a='123123'
7、仔细观察,勤于查找,多用官方文档
8、reference:
9、后续问题:
目前仍有一些问题,在xpath提取数据的时候,由于一些课程的xml差距比较大,比如有些课程有备注信息:
<td width="60"><small><small>双语教学。 <small/><small/></td>
则需要使用xpath("//td/small/small")获取,但有一些课程没有备注信息:
<td width="60">.</td>
则无法使用有备注信息的xpath语句进行获取,理论上应该有解决办法,但目前对xpath了解的还不够深刻,留作后面考虑
改进:
1、多线程,学期数过多,最好能够多线程/进程获取数据
2、添加对异常的处理:urlopen,xpath语句没有寻找到想要的东西等等