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检测远程端口是否打开的方法
Mar 14 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
Oct 08 Python
Python实现的密码强度检测器示例
Aug 23 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
《Python学习手册》学习总结
Jan 17 Python
基于python使用tibco ems代码实例
Dec 20 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
Python基于BeautifulSoup爬取京东商品信息
Jun 01 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
Python基础之数据结构详解
Apr 28 Python
python+pytest接口自动化之token关联登录的实现
Apr 06 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获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
php对象工厂类完整示例
2018/08/09 PHP
载入进度条 效果
2006/07/08 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python Kmeans算法原理深入解析
2019/08/23 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
老师推荐信
2013/10/28 职场文书
毕业生找工作的求职信范文
2013/12/24 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
教师新年寄语
2014/04/03 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
调研座谈会发言材料
2014/08/23 职场文书
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers