起因
起因是因为草榴论坛,只有会员才能使用搜索功能,非会员不能用,这就给找资源带来了很多的不便,然后我想,我把每个资源帖子的标题和地址爬下来,不就可以在本地用搜索功能了吗?
于是说干就干。
初步探究
先初步研究了一下网页源码和网页链接之后,觉得这个工作不难,网页地址的翻页就是原地址之后修改 "page=x" 其中 x 就是页数,而且资源帖子是存在一个表格里的,所以地址获取和页面都不复杂, 于是就着手开始写爬虫。
编程语言用的是 Python
写爬虫中遇到的问题与学习
最开始打算直接用
- urllib.urlopen(url)
来直接爬,但是发现该论坛应该是启用了防爬虫措施,用了几种链接获取方法都拿不到需要的东西。
这可怎么办呢
想到之前看到的大杀器——selenium,直接模拟网页操作,这总不会被禁了吧。
果然用 selenium 之后就可以顺利爬下来所需要的内容
因为之前没怎么用过 selenium,所以就仔细研究了一下 selenium 获取元素的方法,然后对照着网页源码,每个帖子定位的源码地方在:
********** 这里是标题 **********
发现直接采用
- find_element_by_tag_name("h3")
命令只能抓下来标题部分,不能抓下来超链接,因为用
- get_attribute('href')
- find_elements_by_xpath("//h3/a[@target='_blank']")
就能非常好的找到结果,然后
- x.textx.get_attribute('href')
分别就得到标题和地址。
写文件遇到的问题
然后抓取数据的问题得到解决后,就要写入数据了,打算直接写到一个 csv 文件里,用「,」隔开标题和地址,最后用 excel 打开就好。
但是写入的时候碰见的问题是,因为标题中文用的是 Unicode 编码,直接 write 是不支持的,所以查了下相关资料,用 utf-8 编码打开并写入文件即可。
- import codecsfile_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 页之后还是需要会员才能访问了
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/02-15/17197285.html