Python实现爬取知乎神回复简单爬虫代码分享
作者:junjie 发布时间:2023-03-23 19:00:10
看知乎的时候发现了一个 “如何正确地吐槽” 收藏夹,里面的一些神回复实在很搞笑,但是一页一页地看又有点麻烦,而且每次都要打开网页,于是想如果全部爬下来到一个文件里面,是不是看起来很爽,并且随时可以看到全部的,于是就开始动手了。
工具
1.Python 2.7
2.BeautifulSoup
分析网页
我们先来看看知乎上该网页的情况
网址:,容易看到,网址是有规律的,page慢慢递增,这样就能够实现全部爬取了。
再来看一下我们要爬取的内容:
我们要爬取两个内容:问题和回答,回答仅限于显示了全部内容的回答,如下面这种就不能爬取,因为好像无法展开(反正我不会。。),再说答案不全的话爬来也没用,所以就不爬答案不全的了吧。
好,那么下面我们要找到他们在网页源代码中的位置:
即我们找到问题的内容包含在<h2 class = "zm-item-title"><a tar...>中,那么我们等会就可以在这个标签里面找问题。
然后是回复:
有两个地方都有回复的内容,因为上面那个的内容还包括了<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() #关闭文件
代码虽然不常,可是写了我半天,开始各种出问题。
运行
然后我们运行就可以爬了:
等运行完毕,我们打开文件howtoTucao.txt,可以看到,这样就爬取成功了。只是格式可能还是有点问题,原来是我No Answer没加换行,所以No Answer还会混到文本里面去,加两个换行就可以了。


猜你喜欢
- 知识点:了解lxml模块和xpath语法的关系;了解lxml模块的使用场景;了解lxml模块的安装;了解 谷歌浏览器xpath helper
- 使用python进行图片处理,现在需要读出图片的任意一块区域,并将其转化为一维数组,方便后续卷积操作的使用。 下面使用两种方法进行处理:co
- Python自动化测试 Eclipse+Pydev 搭建开发环境C#之所以容易让人感兴趣,是因为安装完Visual Studio, 就可以很
- (1)OracleServiceSID 数据库服务,这个服务会自动地启动和停止数据库。如果安装了一个数据库,它的缺省启动类型为自动。服务进程
- 前提环境准备python3+pillow+pyautogui先提前安装好python3以及pillow和pyautogui模块这里介绍一下模
- 本文实例为大家分享了wxPython色环电阻计算器的具体代码,供大家参考,具体内容如下import wx # 导入wxPythonclass
- jinja2简介特征沙箱中执行强大的 HTML 自动转义系统保护系统免受 XSS模板继承及时编译最优的 python 代码可选提前编译模板的
- 最终的效果废话不多少,直接上图这里可以清楚的看到,数据库里包含了日期,内容,和网站link下面我们来分析怎么实现使用的库import req
- 方法一: 1、在DOS窗口下输入net stop mysql5 或 net stop mysql 2、开一个DOS窗口,这个需要切换到mys
- 1.视频分解图片我们使用cv2.VideoCapture来读取视频import cv2cap = cv2.VideoCapture('
- 前言平台:windows 10.0python 3.8oraclemysql目的需要通过python处理数据,并将结果保存至SQL数据库中,
- 特点在 dayjs 之前,还有一个时间处理工具 moment.js,但是它的体积比较大,即使经过压缩压缩之后依然有 80kb 左右。而前者
- 目录实例演示1. axios上传普通文件:2. 大文件导入:结语这次我要讲述的是在React-Flask框架上开发上传组件的技巧。我目前主要
- 定时器定时器:每隔一段时间启动一次线程threading.Timer创建的是一个线程!定时器基本上都是在线程中执行创建定时器:threadi
- 本文实例讲述了golang操作mongodb的方法。分享给大家供大家参考。具体实现方法如下:package mainimport (&nbs
- 在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定
- pip install命令用于安装扩展库,由于安装扩展库需要从国外网站下载,速度较慢,可以使用-i选项设置临时使用国内的镜像网站。命令格式:
- 前言随着深度学习的不断发展,从开山之作Alexnet到VGG,网络结构不断优化,但是在VGG网络研究过程中,人们发现随着网络深度的不断提高,
- 操作步骤进入命令行环境。我使用的是conda。有两种方式进入命令行。方法1:通过anconda navigator界面,选择environm
- 【尝尝管理员的滋味】- 淡然看,其实一切都很简单IE的滤镜泄露是最大的危害,没有找到方法解决,所以禁用了滤镜。<!DOCTYPE ht