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 匹配任意字符(包括换行符)的正则表达式写法
Oct 29 Python
python通过urllib2获取带有中文参数url内容的方法
Mar 13 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
在python中安装basemap的教程
Sep 20 Python
Python 中包/模块的 `import` 操作代码
Apr 22 Python
numpy下的flatten()函数用法详解
May 27 Python
Django框架视图介绍与使用详解
Jul 18 Python
Python中的四种交换数值的方法解析
Nov 18 Python
使用Puppeteer爬取微信文章的实现
Feb 11 Python
详解python环境安装selenium和手动下载安装selenium的方法
Mar 17 Python
PyQt5 QDockWidget控件应用详解
Aug 12 Python
Python爬虫后获取重定向url的两种方法
Jan 19 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
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
php图像处理类实例
2015/07/28 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
PHP getName()函数讲解
2019/02/03 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
python实现狄克斯特拉算法
2019/01/17 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
python实现扫雷游戏的示例
2020/10/20 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
《维生素c的故事》教学反思
2014/02/18 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
商品陈列协议书
2014/09/29 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书