您的位置:首页 > 其它

一个简易而有趣的爬虫——对草榴帖子的爬取

2017-02-07 01:06 3443 查看
去年就写过一个类似的爬虫程序,不过因为重装电脑找不到了,今天刚好又再写了一个,而且写的比之前的更加简洁。把写爬虫过程中遇到的问题,和思路简单记录下来。源代码发在我的github上:https://github.com/haolexiao/A-toy-caoliu-crawler 其实代码不长也非常的简洁。

起因

起因是因为草榴论坛,只有会员才能使用搜索功能,非会员不能用,这就给找资源带来了很多的不便,然后我想,我把每个资源帖子的标题和地址爬下来,不就可以在本地用搜索功能了吗?

于是说干就干。

初步探究

先初步研究了一下网页源码和网页链接之后,觉得这个工作不难,网页地址的翻页就是原地址之后修改”page=x”其中x就是页数,而且资源帖子是存在一个表格里的,所以地址获取和页面都不复杂, 于是就着手开始写爬虫。

编程语言用的是Python

写爬虫中遇到的问题与学习

最开始打算直接用

urllib.urlopen(url)


来直接爬,但是发现该论坛应该是启用了防爬虫措施,用了几种链接获取方法都拿不到需要的东西。

这可怎么办呢

想到之前看到的大杀器——selenium,直接模拟网页操作,这总不会被禁了吧。

果然用selenium之后就可以顺利爬下来所需要的内容

因为之前没怎么用过selenium,所以就仔细研究了一下selenium获取元素的方法,然后对照着网页源码,每个帖子定位的源码地方在:

<h3><a href="**********这里是超链接地址**********" target="_blank" id="">**********这里是标题**********</a></h3>


发现直接采用

find_element_by_tag_name("h3")


命令只能抓下来标题部分,不能抓下来超链接,因为用

get_attribute('href')


命令得到的是空列表。

如果要抓超链接的话,得再按照tag:a这个标签来抓,这样就太麻烦了(其实我是后来才意识到:按照h3的tag找,找的的是包含h3部分的整个,而直接用get_attribute的话,因为h3标签里不含有href的,所以找不出来。此时只要再继续抓a的tag就能找出来)

然后发现

find_elements_by_xpath("//h3/a[@target='_blank']")


就能非常好的找到结果,然后

x.text
x.get_attribute('href')


分别就得到标题和地址。

写文件遇到的问题

然后抓取数据的问题得到解决后,就要写入数据了,打算直接写到一个csv文件里,用「,」隔开标题和地址,最后用excel打开就好。

但是写入的时候碰见的问题是,因为标题中文用的是Unicode编码,直接write是不支持的,所以查了下相关资料,用utf-8编码打开并写入文件即可。

import codecs
file_output = codecs.open('caoliu.csv','w', 'utf_8_sig')


至于后面的为什么是’utf_8_sig’而不是’utf-8’那是因为默认的utf-8是不带BOM的,用excel打开中文是乱码,用Notepad++可以正常打开【去年那次我是先用notepad++打开,然后用Notepad++里自带的转换格式进行转换的】

今年我研究了一下发现是因为带不带BOM的问题,网上搜了下用’utf_8_sig’就可以直接解决,搞定~

结果

最后爬了十几分钟,把骑兵区的前100个页总共9k多条的帖子标题和地址都给抓到本地excel里了

为什么是前100页呢,因为100页之后还是需要会员才能访问了

参考资料

找了不少参考资料尤其是关于selenium的用法,下面这篇博文讲的还是非常的详细的:

Python爬虫学习(9):Selenium的使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  爬虫 论坛