Python知乎爬虫

知乎问题列表爬虫

暑假放假在家实在是无聊,无聊到开始敲代码。在家学了一点Python编程。从基本知识学习到后来到学习别人的开源项目。对爬虫程序有了些基本了解。看到别人写得爬虫程序抓取网页图片或者新闻什么的,感觉很有意思。作为练手,自己写了个知乎爬虫,扫描知乎问题列表,看有哪些问题是存在的,问题的最高点赞是多少。

参考了李劼杰学长的豆瓣音乐专辑的分析思路。对知乎问题分析发现知乎问题的构成是http://www.zhihu.com/question/+数字,不同的问题数字不同。所以理论上设置变量,通过变量递增的方法即可扫描全部的问题。不妨设变量为questionId,观察题目的url发现,数字的范围是20000000到30000000之间,所以数字不需要从0开始递增,而是从20000000开始。对于某个数字questionId查看该问题是否存在,我使用的是请求状态字判断。urllib.urlopen(url[, data[, proxies]])中urlopen返回 一个类文件对象,他提供了如下方法:

* read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样;
* info():返回一个httplib.HTTPMessage 对象,表示远程服务器返回的头信息;
* getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;
* geturl():返回请求的url;

使用getcode()方法,判断返回的状态字,如果是200则表示该问题存在。接着使用正则表达式查找最高票答案的支持票数。

最后将数据写入数据库。

############

学习Python是使用的:51CTO学院的视频+python基础教程(智普教育自编分享)无水印版.pdf+笨办法学 Python

示例程序参考的开源中国所共享的开源Python代码

正则表达式是其中非常重要的一部分,附参考链接http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx

http://www.crifan.com/files/doc/docbook/regular_expression/release/html/regular_expression.html

############

最后附上程序代码和我抓取到的部分结果(宿舍网总是断,伤不起啊):

QuestionScan

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据