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 23 Python
Python科学计算之Pandas详解
Jan 15 Python
python爬虫入门教程--快速理解HTTP协议(一)
May 25 Python
Python实现购物程序思路及代码
Jul 24 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
在python中画正态分布图像的实例
Jul 08 Python
python实现图片插入文字
Nov 26 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 Python
如何使用Python调整图像大小
Sep 26 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 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中文本操作的类
2007/03/17 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
python实现apahce网站日志分析示例
2014/04/02 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
区域销售经理职责
2013/12/22 职场文书
学生会招新策划书
2014/02/14 职场文书
土木工程师职业规划范文
2014/03/07 职场文书
节约电力资源的建议书
2014/03/12 职场文书
服务承诺书范文
2014/05/19 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
英语感谢信范文
2015/01/20 职场文书
生死抉择观后感
2015/06/09 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
深入解析MySQL索引数据结构
2021/10/16 MySQL
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技