摘要

众所周知,现在网页上面的内容。如果遇到优秀的资源和文章,如果不尽快保存下来的话,可能过段时间就被屏蔽或者下架了,那么在这种前提下,如何以较为完整的格式和模板,将所需的内容保存下来,已经成为我们的必修课。

文章给大家提供如何快速保存指定的知乎问答回复的内容。

找到所要提取的指定内容

必须根据指定的回答链接才可以提取,例如下图这种

如果是只有问题的链接,没有回答的链接,怎么处理呢?

根据你所需要的保存到回答,找到该答主的个人主页,根据回答问题的时间,找到该回答

之后点击该问题的标题,即可以跳转到该用户回答的链接地址,即可以进行提取

根据链接信息提取文章内容,代码如下:

import os
import requests
from bs4 import BeautifulSoup
import base64
import imghdr
import sys
"""用于爬取知乎上面的指定回答"""def fetch_url_content(url):try:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}response = requests.get(url, headers=headers)response.raise_for_status()response.encoding = response.apparent_encodingreturn response.textexcept Exception as e:print(f"获取URL内容时发生错误: {url}。错误信息: {e}")return Nonedef extract_answer_content(html_content):soup = BeautifulSoup(html_content, 'html.parser')answer = soup.find('div', class_='RichContent-inner')if answer:return str(answer)else:return Nonedef embed_images_in_base64(html_content):soup = BeautifulSoup(html_content, 'html.parser')images = soup.find_all('img')prev_image_src = Nonefor img in images:image_url = Noneif 'data-actualsrc' in img.attrs:image_url = img['data-actualsrc']elif 'src' in img.attrs:image_url = img['src']if not image_url or image_url.startswith('data:image'):continue# 如果相邻的图像具有相同的src属性,则删除一个if prev_image_src == image_url:img.extract()continueresponse = requests.get(image_url)response.raise_for_status()image_data = response.contentimage_ext = imghdr.what(None, image_data)if not image_ext:print(f'未知的图片格式: {image_url}')continuebase64_encoded_image = base64.b64encode(image_data).decode('utf-8')data_uri = f'data:image/{image_ext};base64,{base64_encoded_image}'img['src'] = data_uriprev_image_src = image_urlreturn str(soup)def save_answer_to_html(answer_content, file_path):html_template = '''
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>知乎答案</title><style>body {{font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';font-size: 16px;line-height: 1.6;color: #333;max-width: 800px;margin: 0 auto;padding: 20px;}}img {{max-width: 100%;height: auto;}}</style>
</head>
<body>{content}
</body>
</html>
'''with open(file_path, 'w', encoding='utf-8') as f:f.write(html_template.format(content=answer_content))def main(save_dir=None):print("请输入知乎问题/答案的URL:")zhihu_answer_url = input()print("请输入输出文件的路径(按Enter默认当前工作路径):")save_dir = input()if not save_dir.strip():save_dir = os.getcwd()  # 默认当前工作路径else:save_dir = os.path.abspath(save_dir)   # 它会将相对路径转换为绝对路径,以便程序可以正确找到文件或目录。# 无论用户输入相对路径还是绝对路径,程序都能正确地输出HTML文件到指定的位置。# 将最终下载的内容保存到outputfile文件夹中save_dir = os.path.join(save_dir, 'outputfile')# 确保 outputfile 文件夹存在,如果不存在则创建if not os.path.exists(save_dir):os.makedirs(save_dir)# 获取答案的HTML内容html_content = fetch_url_content(zhihu_answer_url)if not html_content:print("无法获取答案HTML内容")return# 提取答案中的文字和图片answer_content = extract_answer_content(html_content)if not answer_content:print("无法提取答案内容")return# 将图片转换为Base64并嵌入到答案内容中answer_content_with_embedded_images = embed_images_in_base64(answer_content)# 将答案内容保存为HTML文件if not os.path.exists(save_dir):os.makedirs(save_dir)html_file_path = os.path.join(save_dir, 'answer.html')save_answer_to_html(answer_content_with_embedded_images, html_file_path)print(f"答案已保存到: {html_file_path}")# 下载完成后,并打开# output_file_path = os.path.join(save_dir, 'answer.html')  # 具体可能需要替换# webbrowser.open(output_file_path)if __name__ == "__main__":main()os.system('pause')   # 按任意键继续。
当图片无法加载出来的时候,使用兼容模式ie浏览器

exe文件提取

如果不想运行代码,可以直接使用封装好的exe文件进行处理

链接:https://pan.baidu.com/s/1K6rodH5iXUHdUf_PyB_1mg?pwd=75ec 
提取码:75ec

源码教学,如何提取知乎问答中的回复相关推荐

  1. 1.是人就能学会的Spring源码教学-总览

    是人都会的Spring源码教学-总览 练武不练功,到老一场空.学IT,不学源码,那么就可能变成挨踢.对源码的学习就是程序员的内功,体现了一个IT人员的真正的实力. 我认为对于一门技术的学习分为三个阶段 ...

  2. 自动发邮件的程序 c语言,5分钟!教你用C语言发送邮件:附送源码+教学!

    5分钟!教你用C语言发送邮件:附送源码+教学!-1.jpg (10.71 KB, 下载次数: 0) 2018-9-3 02:21 上传 关注<一碳科技>,获取更多知识! 前言 相信年夜家都 ...

  3. php加密解密p源码可以吗,论 如何做好PHP的加密解密呐,源码教学

    原标题:论 如何做好PHP的加密解密呐,源码教学 各位朋友,大家下午好! 今天给大家带来的是 如何做好PHP的加密解密呐,源码教学! 这里需要用到 一款 PHP加密解密类库! 由于类库的源码比较长,需 ...

  4. 在线教育网站源码教学视频加速的解决方案

    互联网高速发展的今天,在线教育作为一种新兴教育方式,引得越来越多的教育培训机构参与其中,决定找专业服务商选择优质的在线教育网站源码,搭建出属于教育培训机构自己的在线教育网站.从服务商的角度来看,所涉及 ...

  5. Apache源码包在LINUX(CENTOS6.8)中的安装(出现问题及解决)

    任务:在CENT6.8系统中安装Apache(版本为:httpd-2.4.41) 前提:由于源码包必须先编译后安装,所以必须先安装编译器:gcc 理论步骤: 1.检测gcc软件包,如果不存在则进行安装 ...

  6. Alibaba Druid 源码阅读(四) 数据库连接池中连接获取探索

    Alibaba Druid 源码阅读(四) 数据库连接池中连接获取探索 简介 上文中分析了数据库连接池的初始化部分,接下来我们来看看获取连接部分的代码 数据库连接池中连接获取 下面的相关的代码,在代码 ...

  7. 直播源码搭建教程之在h5 video中的直播

    直播源码搭建教程之在h5 video中的直播 直播越来越成为趋势,因为疫情的冲击,不管是直播带货还是直播教育等等,将线上模式推上了巅峰- 因为业务和兴趣关系,稍微研究了一下在H5中直播的相关知识. P ...

  8. ORB-SLAM2源码特征点提取

    初始化图像金字塔相关变量: 变量名 描述 配置从TUM1.yaml读入(初始值) int nfeatures 指定要提取的特征点数目 ORBextractor.nFeatures: 1000 floa ...

  9. 【源码分享】医生健康科普问答咨询平台(前端+后台)带手机端

    医生健康科普问答咨询平台(前端+后台)源码带手机端 开发语言 : C# 数据库 : SQL2008 开发工具 : VS2017 源码类型:全开源免费分享,需要源码学习可私信我. 系统概述: 医生健康科 ...

最新文章

  1. anki_Anki如何挽救我的工程生涯
  2. 桌面上的计算机打开速度慢,电脑开机进入桌面特别慢
  3. 思科AP-什么是COS AP?
  4. 配置 BeautifulSoup
  5. 在maven项目结构下对于Resources目录下文件的存取
  6. c语言函数操作一维数组
  7. 当post 的字段很多,post的字段并不完全修改(有的值是前端input的值,有的任保留原来原来数据库的值),...
  8. 多线程(一)--线程的创建,Thread类与Runnable接口
  9. ubuntu linux镜像文件下载地址,ubuntu7.04下载地址大合集
  10. 必备知识:相机标定-旋转矩阵性质
  11. React学习笔记之四---抽离组件
  12. java实现table斜线,诸位大神 ,怎样在table的 td中添加 一条斜线
  13. 猜数字小游戏(随机生成’三剑客‘)
  14. 小米手机二季度国内业绩回稳微增,雷军组织架构调整成效初显
  15. 关于程序的那些梗,我能笑一年!
  16. 项目管理计算:EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI各是什么意思
  17. 最小生成树(MST)相关三题
  18. 【360图书馆】插入U盘自动攻击:BadUSB原理与实现
  19. C#对磁盘路径字符串的相关操作
  20. 什么是微波天线阵列及微波天线阵列类型

热门文章

  1. 好消息!广州终于可以住房公积金还用来还房租了
  2. 大型电磁铁磁场设计方案
  3. 在c语言中,什么函数能测量当前变量所占字节数,2017年9月计算机二级考试C语言预习自测题(4)...
  4. ubuntu下载网易云出现错误
  5. 【Rust日报】 2019-06-04:「心得」如何改进一个棘手的并发接口
  6. element ui 的table单元格合并
  7. 沈家桢:在家人制定适合自己的功课
  8. 抽奖程序:根据时间抽奖的前端js程序
  9. struts2的国际化实例:中英文怎么转换
  10. 今天的码农女孩做了关于文件操作和文件拖拽的笔记 2022/1/21