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服务器端收发请求的实现代码
Sep 29 Python
Windows系统下安装Python的SSH模块教程
Feb 05 Python
Python将多份excel表格整理成一份表格
Jan 03 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
python pygame模块编写飞机大战
Nov 20 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
Jun 04 Python
Python基于正则表达式实现计算器功能
Jul 13 Python
python时间time模块处理大全
Oct 25 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
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
Python正则表达式介绍
2012/08/06 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
python如何调用字典的key
2020/05/25 Python
Django配置跨域并开发测试接口
2020/11/04 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
RealTek面试题
2016/06/28 面试题
介绍一下Ruby的多线程处理
2013/02/01 面试题
学生党员公开承诺书
2014/05/28 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
会议新闻稿
2015/07/17 职场文书
Mysql关于数据库是否应该使用外键约束详解说明
2021/10/24 MySQL
在CSS中使用when/else的方法
2022/01/18 HTML / CSS
java代码实现空间切割
2022/01/18 Java/Android