Python实现爬取知乎神回复简单爬虫代码分享


Posted in Python onJanuary 04, 2015

看知乎的时候发现了一个 “如何正确地吐槽” 收藏夹,里面的一些神回复实在很搞笑,但是一页一页地看又有点麻烦,而且每次都要打开网页,于是想如果全部爬下来到一个文件里面,是不是看起来很爽,并且随时可以看到全部的,于是就开始动手了。

工具

1.Python 2.7
2.BeautifulSoup

分析网页

我们先来看看知乎上该网页的情况

网址:Python实现爬取知乎神回复简单爬虫代码分享,容易看到,网址是有规律的,page慢慢递增,这样就能够实现全部爬取了。

再来看一下我们要爬取的内容:

Python实现爬取知乎神回复简单爬虫代码分享我们要爬取两个内容:问题和回答,回答仅限于显示了全部内容的回答,如下面这种就不能爬取,因为好像无法展开(反正我不会。。),再说答案不全的话爬来也没用,所以就不爬答案不全的了吧。

Python实现爬取知乎神回复简单爬虫代码分享

好,那么下面我们要找到他们在网页源代码中的位置:

Python实现爬取知乎神回复简单爬虫代码分享即我们找到问题的内容包含在<h2 class = "zm-item-title"><a tar...>中,那么我们等会就可以在这个标签里面找问题。

然后是回复:

Python实现爬取知乎神回复简单爬虫代码分享有两个地方都有回复的内容,因为上面那个的内容还包括了<span..>等一些内容,不方便处理,我们爬下面那个的内容,因为那个里面的内容纯正无污染。

代码

好,这时候我们试着写出python代码:

# -*- coding: cp936 -*-

import urllib2

from BeautifulSoup import BeautifulSoup
f = open('howtoTucao.txt','w')     #打开文件
for pagenum in range(1,21):        #从第1页爬到第20页
    strpagenum = str(pagenum)      #页数的str表示

    print "Getting data for Page " + strpagenum   #shell里面显示的,表示已爬到多少页

    url = "http://www.zhihu.com/collection/27109279?page="+strpagenum  #网址

    page = urllib2.urlopen(url)     #打开网页

    soup = BeautifulSoup(page)      #用BeautifulSoup解析网页

    

    #找到具有class属性为下面两个的所有Tag

    ALL = soup.findAll(attrs = {'class' : ['zm-item-title','zh-summary summary clearfix'] })
    for each in ALL :               #枚举所有的问题和回答

        #print type(each.string)

        #print each.name

        if each.name == 'h2' :      #如果Tag为h2类型,说明是问题

            print each.a.string     #问题中还有一个<a..>,所以要each.a.string取出内容

            if each.a.string:       #如果非空,才能写入

                f.write(each.a.string)

            else :                  #否则写"No Answer"

                f.write("No Answer")

        else :                      #如果是回答,同样写入

            print each.string

            if each.string: 

                f.write(each.string)

            else :

                f.write("No Answer")

f.close()                           #关闭文件

代码虽然不常,可是写了我半天,开始各种出问题。

运行

然后我们运行就可以爬了:

Python实现爬取知乎神回复简单爬虫代码分享结果

等运行完毕,我们打开文件howtoTucao.txt,可以看到,这样就爬取成功了。只是格式可能还是有点问题,原来是我No Answer没加换行,所以No Answer还会混到文本里面去,加两个换行就可以了。

Python实现爬取知乎神回复简单爬虫代码分享

Python 相关文章推荐
python的id()函数解密过程
Dec 25 Python
在Python下尝试多线程编程
Apr 28 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python数据结构之单链表详解
Sep 12 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
python树的同构学习笔记
Sep 14 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
如何解决python多种版本冲突问题
Oct 13 Python
python statsmodel的使用
Dec 21 Python
Python中requests做接口测试的方法
May 30 Python
Python连接mssql数据库编码问题解决方法
Jan 01 #Python
Python中optparse模块使用浅析
Jan 01 #Python
Python中urllib2模块的8个使用细节分享
Jan 01 #Python
Python读取ini文件、操作mysql、发送邮件实例
Jan 01 #Python
Python实现检测服务器是否可以ping通的2种方法
Jan 01 #Python
Python Web框架Flask信号机制(signals)介绍
Jan 01 #Python
Python模拟登录12306的方法
Dec 30 #Python
You might like
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
JS中表单的使用小结
2014/01/11 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
js实现文字滚动效果
2016/03/03 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
python实现dict版图遍历示例
2014/02/19 Python
Python3.x中自定义比较函数
2015/04/24 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
wxPython实现画图板
2020/08/27 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
python 实现波浪滤镜特效
2020/12/02 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
银行贷款承诺书
2014/03/29 职场文书
大学生工作自荐书
2014/06/16 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers