其中,必须含有的关键词以空格间隔,或含有的关键词以+间隔,例如,查找知乎ID为23437659的问题:“国内你最喜欢的城市(除家乡外生活过的城市)是哪里?为什么?”,要求回答中含有杭州,同时含有南京或武汉,则输入关键词为“杭州 南京+武汉”。其中,问题ID从问题链接中即可得到,如上述问题链接为https://www.zhihu.com/question/23437659,问题ID即为链接后面的数字

请输入问题编号:23437659
请输入关键字(同时含有以空格间隔,或含有用+间隔):杭州 南京+武汉

  符合条件的回答保存在csv文件和txt文件中,其中,csv文件只含有所有符合条件的回答的链接。

#!/user/bin/python
#-*-coding:utf-8-*-
#author:luoxiaoxu
#blog:xiaoxu.online
#Filename: ZhihuAnswerDowload.py
#Function: 爬取知乎问题中含有特定关键词的回答from bs4 import BeautifulSoup
import requests
import os
import re
import time
import csv
import jsondef GetAnswer(*Question_ID):if len(Question_ID)==0:Question_ID=input("请输入问题编号:")keyword=input('请输入关键字(同时含有以空格间隔,或含有用+间隔):')  # 例如,必须含有杭州,同时含有武汉或南京,输入“杭州 武汉+南京”keywords=keyword.split()                                            #下载全部答案,直接enterif keyword=='':keyword='无'headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"\" AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}limit=10  #每次显示的答案个数offset=0  #下一次显示的回答偏移量total_num=10  #答案个数,初始设为limitbrowse_num=0  #已经遍历的回答个数record_num=0  #含关键字的回答个数title=''if not os.path.exists('知乎下载/'):os.makedirs('知乎下载/')print('\n正在爬取……\n')while browse_num<total_num:url = "https://www.zhihu.com/api/v4/questions/{Question_ID}/answers?include=content&limit="\"{limit}&offset={offset}&platform=desktop&sort_by=default"\.format(Question_ID=str(Question_ID),limit=str(limit),offset=str(offset))res=requests.get(url,headers=headers)try:res=json.loads(res.content)except:print('问题编号输入错误!\n')return Nonetotal_num=res['paging']['totals']cons=res['data']if cons is not None:if total_num<=0:print('该问题暂时无答案!')breakif title=='':title=cons[0]['question']['title']path_csv,path_txt=CreativeFile(title,keyword)  #创建csv和txt文件,csv文件为保存所有含有关键词回答的链接列表for con in cons:browse_num+=1Re=re.compile(r'<[^>]+>',re.S)answer_detail=Re.sub('',con['content'])   #获取具体回答内容flag=Trueif len(keywords)>0:flag=HasKeywords(answer_detail,keyword)  #查询是否有关键词if flag:record_num+=1author_name=con['author']['name']author_url='https://www.zhihu.com/people/'+con['author']['url_token'] if not author_name=='匿名用户' else ' 'answer_url='https://www.zhihu.com/question/'+str(Question_ID)+'/answer/'+str(con['id'])Save2File_csv(path_csv,[str(record_num)+'.',author_name,answer_url,author_url])answer_txt=[str(record_num)+'.',author_name+'   主页:'+author_url]answer_txt.append('\n\n链接:'+answer_url+'\n')answer_txt.append('\n'+answer_detail+\'\n-------------------------------------------------------------------------------\n')Save2File_txt(path_txt,answer_txt)print('已保存第%d个回答\n'%record_num)offset+=len(cons)if len(cons)<limit:  #已爬取到最后一页breakif len(keywords)==0:print('爬取完成,已保存全部%d个回答!\n'%record_num)elif record_num>0:print('爬取完成,已保存%d个与关键词有关的回答!\n'%record_num)else:os.remove(path_csv)os.remove(path_txt)print('未找到与关键词有关的答案\n')def Save2File_csv(path,content):f=open(path,'a+')writer=csv.writer(f)writer.writerow(content)f.close()def Save2File_txt(path,contents):f=open(path,'a+',encoding='utf-8')for content in contents:f.writelines(content)f.writelines('\n')def HasKeywords(answer_detail,keyword):   #判断是否含有所有关键词flag=Truefor key in keyword.split():    flag2=Falsefor sub_key in key.split('+'):flag2=flag2 or answer_detail.find(sub_key)>0if flag2:breakflag=flag and flag2if not flag:return Falsereturn Truedef CreativeFile(title,keyword):path_csv='知乎下载/'+title+'.csv'path_txt='知乎下载/'+title+'.txt'if os.path.exists(path_csv):   #若文件存在,清空f=open(path_csv,'w')f.seek(0)f.truncate()f.close()if os.path.exists(path_txt):f=open(path_txt,'w')f.seek(0)f.truncate()f.close()Save2File_csv(path_csv,[title])Save2File_csv(path_csv,['关键字:'+keyword])Save2File_csv(path_csv,['序号','作者昵称','回答链接','主页链接'])Save2File_txt(path_txt,[title,'关键字:'+keyword+'\n'])return path_csv,path_txtif __name__=='__main__':GetAnswer()

根据关键词组合,爬取知乎某个问题下所有含有关键词的回答相关推荐

  1. python实战1.0——爬取知乎某问题下的回复

    python实战1.0--爬取知乎某问题下的回复 确定问题 爬取 进行简单筛选 保存数据 # 获取问题下的回复总数 def get_number():url = 'https://www.zhihu. ...

  2. 数据挖掘 文本分类 知乎问题单分类(二):爬取知乎某话题下的问题(数据爬取)

    数据挖掘 文本分类 知乎问题单分类(二):爬取知乎某话题下的问题(数据爬取) 爬虫目标 Scrapy框架介绍 Scrapy框架原理 [^1] Scrapy工作流程 [^2] 具体实现 安装Scrapy ...

  3. python爬取知乎话题广场_用于爬取知乎某个话题下的精华问题中所有回答的爬虫...

    思路 我的整个算法的思路还是很简单的,文字版步骤如下: 1.通过话题广场进入某个话题的页面,避免了登陆注册页面的验证,查找到对应要爬取的话题,从 url 中得到话题id 2.该页面的所有资源采用了延迟 ...

  4. python3爬取知乎某话题下的若干个问题及其回答

    思路:通过selenium的webdriver实现页面的点击.下来等操作.页面完全加载后通beautifulsoup来查找相应的标签.将数据放到列表中,然后通过xlwt创建excel,并把数据存进去. ...

  5. Python 网络爬虫实战:爬取知乎回答中的全部图片

    平时逛知乎的时候,经常能看到很多很棒的图片,精美的壁纸,搞笑的表情包,有趣的截图等等,总有想全部保存下来的冲动. 于是在一个小老弟的拜托之下,我把之前的知乎爬虫改造了一下,改装成了一个可以下载知乎回答 ...

  6. python爬取知网论文关键词_Python爬虫根据关键词爬取知网论文摘要并保存到数据库中【入门必学】...

    搜索出来的结果和知网上的结果几乎一样,另外以后面试找Python工作,项目经验展示是核心,如果你缺项目练习,去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面很多新 ...

  7. 知网关键词搜索爬取摘要信息

    知网关键词搜索爬取摘要信息 由于技术不成熟,代码冗余度较高.同时代码也可能会存在错误,也请各路高人指正. 本篇文章应用范围为期刊搜索(不包括外文文献),其他内容,没有进行测试!!! 本次爬虫所采用到的 ...

  8. python爬知网全文期刊数据库_Python爬虫根据关键词爬取知网论文摘要并保存到数据库中【入门必学】...

    搜索出来的结果和知网上的结果几乎一样,另外以后面试找Python工作,项目经验展示是核心,如果你缺项目练习,去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面很多新 ...

  9. python爬虫论文摘要怎么写_Python爬虫根据关键词爬取知网论文摘要并保存到数据库中【入门必学】...

    搜索出来的结果和知网上的结果几乎一样,另外以后面试找Python工作,项目经验展示是核心,如果你缺项目练习,去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面很多新 ...

最新文章

  1. 《修改代码的艺术》迷你书
  2. Struts2中 Result类型配置详解
  3. [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
  4. Java学习总结之第十一章 Java集合
  5. mysql服务启动失败 Starting MySQL. ERROR! The server quit without updating PID file
  6. [转载] python格式化字符串漏洞_从两道CTF实例看python格式化字符串漏洞
  7. fmea第五版pfmea表格_FMEA第五版中文版.pdf
  8. 微处理器 微型计算机 单片机之间有何区别,微处理器,微计算机,微处理机,CPU,单片机,它们之间有何区别...
  9. 问题:计算给定年月日的日期是星期几(泽勒一致性)
  10. 黑马程序员--IO总结(含2个设计模式)
  11. mysql根据出生日期统计各年龄段男女人数
  12. ESP8266的FATAL EXCEPTION 28 29问题原因
  13. 密码学系列之四:一文搞懂序列密码
  14. 递归和循环两种方法完成树的镜像转换
  15. 监听滚动事件 实现动态锚点
  16. 【韩松】Deep Gradient Comression
  17. 阿里巴巴重磅开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS
  18. [Linux驱动炼成记] 11-快速修改芯片驱动中寄存器的值
  19. Running “flutter pub get“ in xxxx... 解决方案
  20. 【编译原理】实验四:Yacc 分析程序生成器

热门文章

  1. EXP-EXP-00107
  2. 听劝!不要什么都不懂就去学外审员|10条经验分享
  3. 使用openCV打开USB摄像头(UVC 小米micro接口)
  4. Harris Corner(Harris角检测)
  5. 向量空间及其子空间的基与维数de 一些命题
  6. python基础笔记0_1
  7. 【推荐】优秀笔记软件——幕布,注册可免费体验一个月高级会员
  8. python pyplot颜色_更改matplotlib.pyplot点的颜色
  9. 解决spring boot logging在两个目录生成日志文件且max-history不生效
  10. Java小案例----阿拉伯数字转换为罗马数字