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自定义解析简单xml格式文件的方法
May 11 Python
python简单文本处理的方法
Jul 10 Python
Python装饰器的执行过程实例分析
Jun 04 Python
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
简单了解python数组的基本操作
Nov 26 Python
python+tifffile之tiff文件读写方式
Jan 13 Python
Python实现仿射密码的思路详解
Apr 23 Python
django模板获取list中指定索引的值方式
May 14 Python
python可迭代对象去重实例
May 15 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 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创建动态图像
2006/10/09 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
Symfony2 session用法实例分析
2016/02/04 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
javascript基本常用排序算法解析
2017/09/27 Javascript
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
如何使用python进行pdf文件分割
2019/11/11 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
Python中内建模块collections如何使用
2020/05/27 Python
python实现录制全屏和选择区域录屏功能
2021/02/05 Python
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
家庭经济困难证明
2015/06/23 职场文书
大学校园招聘会感想
2015/08/10 职场文书
校园安全教育心得体会
2016/01/15 职场文书
检讨书范文
2019/04/16 职场文书
Python实现机器学习算法的分类
2021/06/03 Python