python 爬虫 生成markdown文档

本文介绍的案例为使用python爬取网页内容并生成markdown文档,首先需要确定你所需要爬取的框架结构,根据网页写出对应的爬取代码

1.分析总网页的结构

我选用的是redis.net.com/order/xxx.html

(如:Redis Setnx 命令_只有在 key 不存在时设置 key 的值。);

进入后,f12,进入开发者模式,选中左侧元素

可看到,我们需要爬取的内容是div标签下的class为left的数据,ul下的li下的a标签的 href元素,

这段对应的python为

req = requests.get(url="https://www.redis.net.cn/order/3552.html")  #使用get方式获取该网页的数据。实际上我们获取到的就是浏览器打开百度网址时候首页画面的数据信息
#print(req.text)   #把我们获取数据的文字(text)内容输出(print)出来
req.encoding = "utf-8"  #指定获取的网页内容,即第二句定义req的内容,用utf-8编码
html = req.text   #指定获取的网页内容,即第二句定义req的内容,用text
soup = BeautifulSoup(req.text,features="html.parser")  #用html解析器(parser)来分析我们requests得到的html文字内容,soup就是我们解析出来的结果
# 查找特定的div下的ul下的li下的a标签
div = soup.find('div',class_="left")
ul = div.find('ul')
li_list = ul.find_all('li')
href_list=[]
# 遍历li标签并获取a标签的href内容
for li in li_list:a = li.find('a')href = "https://www.redis.net.cn"+a['href']href_list.append(href)# print(href)
n=1;

于是乎,我们就获得了以下链接地址

2.分析每个链接下的网页结构

首先可分为以下几个结构

第一个为全局唯一的h1标签中的内容,并且处于div class为page-header中,因此代码为

div_title=soup.find('div',class_="page-header")h1_title=div_title.find('h1').text

语法段的信息获取

    pres = soup.find_all('pre', class_='prettyprint linenums')syntax=pres[0].text.strip()

简介版本返回值,分别都是h3标签下的数据

 h3_tag = soup.find_all('h3')introduction_tags = h3_tag[0].find_previous_siblings('p')introduction=""version=""return_value=""for p_tag in introduction_tags:introduction+=p_tag.text.strip()version_tags=h3_tag[1].find_next_sibling('p')for p_tag in version_tags:version+=p_tag.text.strip()return_tags=h3_tag[2].find_next_sibling('p')for p_tag in return_tags:return_value+=p_tag.text.strip()

示例段的数据获取

    pres = soup.find_all('pre', class_='prettyprint linenums')if len(pres) >=2:examples=pres[1].text.strip()else :examples = ""

3.markdown源代码生成

# 定义一个方法来生成Markdown内容
def generate_markdown(website_obj,n):markdown_content = "# "+str(n)+f".{website_obj.title}\n\n"markdown_content += f"## 简介\n```\n{website_obj.introduction}\n```\n\n"markdown_content += f"## 语法\n```\n{website_obj.syntax}\n```\n\n"markdown_content += f"### 可用版本: {website_obj.version}\n\n"markdown_content += f"### 返回值: {website_obj.return_value}\n\n"markdown_content += f"## 示例\n\n```shell\n"for example in website_obj.examples:markdown_content += f"{example}"markdown_content += "\n```\n"return markdown_content

4.完整示例

import requests   #导入我们需要的requests功能模块
from bs4 import BeautifulSoup  #使用BeautifulSoup这个功能模块来把充满尖括号的html数据变为更好用的格式,from bs4 import BeautifulSoup这个是说从bs4这个功能模块中导入BeautifulSoup,是的,因为bs4中包含了多个模块,BeautifulSoup只是其中一个
class Website:def __init__(self, href, title,syntax,examples,introduction,version,return_value):self.href = hrefself.title = titleself.syntax=syntaxself.examples=examplesself.introduction=introductionself.version=versionself.return_value=return_valuedef __str__(self):return f"Website(href={self.href}, title={self.title},syntax={self.syntax},examples={self.examples},introduction={self.introduction},version={self.version},return_value={self.return_value})"
# 定义一个方法来生成Markdown内容
def generate_markdown(website_obj,n):markdown_content = "# "+str(n)+f".{website_obj.title}\n\n"markdown_content += f"## 简介\n```\n{website_obj.introduction}\n```\n\n"markdown_content += f"## 语法\n```\n{website_obj.syntax}\n```\n\n"markdown_content += f"### 可用版本: {website_obj.version}\n\n"markdown_content += f"### 返回值: {website_obj.return_value}\n\n"markdown_content += f"## 示例\n\n```shell\n"for example in website_obj.examples:markdown_content += f"{example}"markdown_content += "\n```\n"return markdown_content
req = requests.get(url="https://www.redis.net.cn/order/3552.html")  #使用get方式获取该网页的数据。实际上我们获取到的就是浏览器打开百度网址时候首页画面的数据信息
#print(req.text)   #把我们获取数据的文字(text)内容输出(print)出来
req.encoding = "utf-8"  #指定获取的网页内容,即第二句定义req的内容,用utf-8编码
html = req.text   #指定获取的网页内容,即第二句定义req的内容,用text
soup = BeautifulSoup(req.text,features="html.parser")  #用html解析器(parser)来分析我们requests得到的html文字内容,soup就是我们解析出来的结果
# 查找特定的div下的ul下的li下的a标签
div = soup.find('div',class_="left")
ul = div.find('ul')
li_list = ul.find_all('li')
href_list=[]
# 遍历li标签并获取a标签的href内容
for li in li_list:a = li.find('a')href = "https://www.redis.net.cn"+a['href']href_list.append(href)# print(href)
n=1;
for hrefitem in href_list:req = requests.get(url=hrefitem)req.encoding = "utf-8"  # 指定获取的网页内容,即第二句定义req的内容,用utf-8编码html = req.text  # 指定获取的网页内容,即第二句定义req的内容,用textsoup = BeautifulSoup(req.text, features="html.parser")div_title=soup.find('div',class_="page-header")h1_title=div_title.find('h1').textpres = soup.find_all('pre', class_='prettyprint linenums')syntax=pres[0].text.strip()if len(pres) >=2:examples=pres[1].text.strip()else :examples = ""h3_tag = soup.find_all('h3')introduction_tags = h3_tag[0].find_previous_siblings('p')introduction=""version=""return_value=""for p_tag in introduction_tags:introduction+=p_tag.text.strip()version_tags=h3_tag[1].find_next_sibling('p')for p_tag in version_tags:version+=p_tag.text.strip()return_tags=h3_tag[2].find_next_sibling('p')for p_tag in return_tags:return_value+=p_tag.text.strip()website=Website(href,h1_title,syntax,examples,introduction,version,return_value)# print(introduction)# print(website.__str__())# 使用上述定义的方法生成Markdown源码markdown_source = generate_markdown(website,n)n=n+1print(markdown_source)

以上案例可将redis key命令篇的案例,爬取生成markdown代码,如果需要爬取多类代码,可修改

req = requests.get(url="https://www.redis.net.cn/order/3552.html") 中的url属性为你所想爬取的类型的一种命令的网址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (5) - Unity Catalog 简介 UC的关键特性 之所以DataBricks要用UC, 很大程度是对安全的管控。从上文可以了解到它的四大特性&#…

C++ OJ基础

C OJ基础 在学校学习C程序设计基础课程的OJ题目 缺少第二十题 这里写目录标题 C OJ基础习题练习(一)打印图形习题练习(二)数据的输入输出习题练习(三)函数重载习题练习(四)设计矩形类习题练习(五)定义Tree类习题练习(六)完善职工工资类Salary的设计习题练习(七)设计矩形类recta…

双目测距工程Stereo-Vision-master学习笔记

硬件: 首先要要把两个摄像头固定到支架上,并且两个摄像头的间距应该在110mm,两个摄像头没有落差 相机的内参数包括焦距、主点坐标、像素尺寸等,这些参数决定了相机成像的几何变换关系。内参数是相机固有的属性,不会随…

UE5 UE4 修复GPU驱动程序崩溃

原贴链接:https://mp.weixin.qq.com/s/e5l9XtfwEFWgwhHi1b2idg UE5 UE4在处理含有大量图形的项目时,你有可能会遇到GPU崩溃 可以通过修改注册表,修复崩溃。 GPU崩溃情况概述 UE5 UE4在处理含有大量图形的项目时,你有可能会遇到G…

JS常用工具:Webpack 和 JShaman分别有什么用?

Webpack和JShaman是两个不同的工具,它们的特点和用途也不同。 Webpack是一个前端资源模块打包工具,主要用于将各种静态资源(如JavaScript、CSS、图片等)视为模块,并将其打包成浏览器可以识别的代码。Webpack的特点包括…

通过生成mcs、bin文件将程序固化到FPGA

通过将程序固化到FPGA,可以做到断电不丢失程序,上电之后就自动启动程序的作用,整个固化步骤主要分为3步,一是修改约束文件,二是生成mcs或bin文件,三是将程序固化到开发板flash 1.修改约束文件 生成固化文…

【物流管理系统-Python简易版】

前端设计-后端开发(DJango项目Demo) 参考资料:【一文到底】【0基础】【快速上手】Django基本使用 创建项目 Pycharm专业版新建DJango项目 项目文件介绍: django_study_demo │─ manage.py 【项目管理的脚本,不要修…

动态规划(day10)买卖股票问题

目录 121. 买卖股票的最佳时机(需要消化下dp的定义和赋值) 看到题目的第一想法 看到代码随想录之后的想法 自己实现过程中遇到的困难 122.买卖股票的最佳时机II(需要理解与消化) 看到题目的第一想法 看到代码随想录之后的想法 自己实现过…

从JavaScript的角度上讲解一下xml

- XML(可扩展标记语言) XML(可扩展标记语言)是一种被设计用于存储和传输结构化数据的标记语言。它与HTML相似,但XML并没有预定义的标签,可以自定义标签及其属性。从JavaScript的角度来看,XML可以…

弟12章 网络编程

文章目录 网络协议概述 p164TCP协议与UDP协议的区别 p165TCP服务器端代码的编写 p166TCP服务器端流程 TCP客户端代码的编写 p167TCP客户端流程主机和客户端的通信流程 tcp多次通信服务器端代码 p168TCP多次通信客户端代码 p169UDP的一次双向通信 p170udp通信模型udp接收方代码u…

Git核心知识总结

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 工具教程 ✨特色专栏: MyS…

BASE64DecodedMultipartFile.base64ToMultipart的使用

BASE64DecodedMultipartFile.base64ToMultipart是一个方法,用于将Base64字符串转换为MultipartFile类型的文件。使用该方法的步骤如下: 1. 首先,确保你已经导入了BASE64DecodedMultipartFile类。2. 将Base64字符串作为参数传递给base64ToMult…

车辆行驶控制运动学模型的matlab建模与仿真,仿真输出车辆动态行驶过程

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 基本假设 4.2 运动学方程 5.完整工程文件 1.课题概述 车辆行驶控制运动学模型的matlab建模与仿真,仿真输出车辆动态行驶过程. 2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a .…

【HarmonyOS】消息通知场景的实现

从今天开始,博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”,对于刚接触这项技术的小伙伴在学习鸿蒙开发之前,有必要先了解一下鸿蒙,从你的角度来讲,你认为什么是鸿蒙呢?它出现的意义又是…

adb 常用命令汇总

目录 adb 常用命令 1、显示已连接的设备列表 2、进入设备 3、安装 APK 文件到设备 4、卸载指定包名的应用 5、从设备中复制文件到本地 6、将本地文件复制到设备 7、查看设备日志信息 8、重启设备 9、截取设备屏幕截图 10、屏幕分辨率 11、屏幕密度 12、显示设备的…

Open3D 点云的移动

可以按照x,y,z 方向移动 translation_vectornp.array([-68,0,0]) pcd_ pcd.translate(translation_vector)

Druid连接池报错

网上各种方法都试了,基本都不行,后来改了一下jar包版本,也就是第四点,才解决。 1、druid.properties文件位置 我学的时候说的是任意位置都行,除了web目录下,但是我试的时候必须要放在resources 文件夹下。…

什么是设计模式(第7章笔记)

目录 一、什么是设计模式 二、设计模式概要 1、名称 2、问题 3、解决方案 4、效果 三、《设计模式》的结构 四、小结 一、什么是设计模式 设计模式:是对已经分析过的问题,以及相关问题解决方案的优秀实践; 1、同样的问题总是重复出现&…

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(5)登录认证

指路(1)(2)(3)(4)👇 黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理_tlias智能学习辅助系统的需求分析-CS…

python学习笔记10(选择结构2、循环结构1)

(一)选择结构2 1、if……else……语句 #(1)基本格式 numbereval(input("请输入您的6位中奖号码:")) if number123456:print("恭喜您,中奖了") else:print("未中奖")#&…