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 = href
        self.title = title
        self.syntax=syntax
        self.examples=examples
        self.introduction=introduction
        self.version=version
        self.return_value=return_value

    def __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的内容,用text
    soup = BeautifulSoup(req.text, features="html.parser")
    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()
    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+1
    print(markdown_source)



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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件重命名:文件命名错了怎么办,新旧文件名互换的方法

在日常生活和工作中,经常要处理各种文件,会因为疏忽或者误解,给文件起错名字。文件名一旦错误,就可能造成后续的困扰,比如找不到需求的文件、混淆不同的文件等。如果文件命名错了如何更正呢?下面来看云炫文…

【Electron】 Vite项目 初始配置 scss

pnpm add -D sasssrc下面创建 styles/main.scss 文件 mian.ts 内引入 ./styles.scss 文件 import ./styles/main.scss 测试scss是否生效&#xff1a; styles/mian.scss :root{--mian:red; } App.vue <template><div>你好</div> </template><s…

上架苹果APP的时候在哪里填写APP的隐私政策信息

在如今高度重视数据隐私的时代&#xff0c;开发并上架一个iOS APP时提供透明的隐私政策是非常重要的。苹果公司对此有严格的规定&#xff0c;任何上架至App Store的应用都必须包含一个隐私政策。以下是您在上架苹果APP时填写隐私政策信息的详细步骤和必须注意的事项。 准备隐私…

阿里巴巴国际站商品采集API商品列表API商品详情数据API

阿里巴巴国际站&#xff08;Alibaba.com&#xff09;是阿里巴巴集团旗下的一个全球贸易平台&#xff0c;旨在连接全球买家和供应商&#xff0c;并促进国际贸易。它是目前世界上最大的B2B&#xff08;企业对企业&#xff09;在线交易市场之一。 阿里巴巴国际站提供了广泛的产品类…

使用知行之桥EDI系统的HTTP签名身份验证

本文简要概述了如何在知行之桥EDI系统中使用 HTTP 签名身份验证&#xff0c;并将使用 CyberSource 作为该集成的示例。 API 概述 API 是”应用编程接口”的缩写。这听起来可能很复杂&#xff0c;但它的真正含义是一种允许两个不同实体相互通信的软件。自开发以来&#xff0c;…

采集小红书笔记详情页的方法,大部分人都想得复杂了

一般来说&#xff0c;社交媒体都有列表页和详情页、个人主页三大页面&#xff0c;列表页一般包含搜索结果页、话题聚合页等等&#xff0c;详情页就是点开某一条笔记或者动态的具体页面&#xff1b; 小红书当然也不例外&#xff0c;比如下面这个话题聚合页&#xff1a; https:/…

高工微报告|智驾前视一体机趋势

传统智驾前视一体机赛道上&#xff0c;1V3R、1V5R产品如何升级备受关注。 根据日前调研获取的信息&#xff0c;1V3R、1V5R向轻量级行泊一体&#xff08;典型为5V5R12U方案&#xff0c;算力平台5-20TOPS&#xff09;迈进的具体市场空间&#xff0c;仍在验证阶段。 其中&#x…

java基于ssm框架的少儿编程在线培训系统论文

目 录 目 录 I 1 课题背景及研究内容 4 1.1 课题背景 4 1.2 开发目的和意义 4 2 相关技术和应用 4 2.1 VUE技术 4 2.2 Mysql数据库简介 5 2.3 SSM框架简介 6 2.4 Eclipse简介 6 2.5 B/S系统架构 6 3 系统分析 8 3.1可行性分析 8 3.1.1技术可行性 8 3.1.2经济可行性 8 3.1.3操作…

经验分享:智能知识库才是数字时代的企业必备选择

随着全球化和竞争的加剧&#xff0c;企业必须通过将知识作为战略资产进行管理&#xff0c;才能保持竞争优势。因此&#xff0c;建设有效的知识库系统&#xff0c;成为了数字时代企业必备的选择。决定企业成功或失败的不再仅仅是产品或服务的质量&#xff0c;而是如何有效利用知…

Redis的实现三:c语言实现平衡二叉树,通过平衡二叉树实现排序集

概况&#xff1a;Redis中的排序集数据结构是相当复杂的独特而有用的东西。它不仅提供了顺序排序数据的能力&#xff0c;而且具有按排名查询有序数据的独特特性。 Redis中的排序集 &#xff08;Sorted Set&#xff09;是一种特殊的数据结构&#xff0c;它结合了集合&#xff0…

mp4文件全部转换为mp3

问题 今天突发奇想&#xff0c;想把mp4视频转换为mp3来收听&#xff0c;于是想到了ffmpeg工具 步骤 安装ffmpeg环境 要在 Windows 上配置 FFmpeg 环境&#xff0c;你可以按照以下步骤进行操作&#xff1a; 下载 FFmpeg&#xff1a; 首先&#xff0c;你需要下载 FFmpeg 的 W…

【MYSQL】MYSQL 的学习教程(十二)之 MySQL 啥时候用记录锁,啥时候用间隙锁

在「读未提交」和「读已提交」隔离级别下&#xff0c;都只会使用记录锁&#xff1b;而对于「可重复读」隔离级别来说&#xff0c;会使用记录锁、间隙锁和 Next-Key 锁 那么 MySQL 啥时候会用记录锁&#xff0c;啥时候会用间隙锁&#xff0c;啥时候又会用 Next-Key 锁呢&#xf…

Apache OFBiz groovy 远程代码执行漏洞(CVE-2023-51467)复现

Apache OFBiz groovy 远程代码执行漏洞&#xff0c;攻击者可构造请求绕过身份认证&#xff0c;利用后台相关接口功能执行groovy代码&#xff0c;导致远程代码执行。 1.漏洞级别 高危 2.漏洞搜索 fofa app"Apache_OFBiz"3.影响范围 Apache OFBiz < 18.12.104…

网站开发第一弹---HTML01

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;网站开发flask框架 &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现…

【Spring Cloud】微服务架构演变及微服务架构介绍

文章目录 系统架构演变单体应用架构垂直应用架构分布式架构SOA 架构微服务架构 微服务架构介绍微服务架构的常见问题微服务架构的常见概念服务治理服务调用服务网关服务容错链路追踪 微服务架构的常见解决方案ServiceCombSpringCloudSpring Cloud Alibaba 总结 欢迎来到阿Q社区…

让企业的招投标文件、生产工艺、流程配方、研发成果、公司计划、员工信息、客户信息等核心数据更安全。

PC端访问地址1&#xff1a;www.drhchina.com PC端访问地址2&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 全方位立体式防护  让数据泄密无处遁形 信息防泄漏是一项系统的整体部署工程&#xff0c;加密监控已成为多数企事业单…

序章 初始篇—转生到vue世界!

Vue.js 是什么&#xff1f; Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项…

Java异常处理--异常处理的方式1

文章目录 一、异常处理概述二、方式1&#xff1a;捕获异常&#xff08;try-catch-finally&#xff09;&#xff08;1&#xff09;抓抛模型&#xff08;2&#xff09;try-catch-finally基本格式1、基本语法2、整体执行过程3、try和catch3.1 try3.2 catch (Exceptiontype e) &…

Arcgis10制图/建模小技巧:梯田地形

小编早年做城市设计的时候&#xff0c;还不知道怎么用gis生成地形&#xff0c;然后导入skechup&#xff1b;只会把cad的等高线导进su后一层层拉伸&#xff08;过程很繁琐&#xff09;&#xff0c;会得到梯田地形。梯田地形虽然不完全贴合实际&#xff0c;但也凑合能用&#xff…

Jupyter Notebook

2017年左右在大学里都听说过Jupyter Notebook&#xff0c;并且也安装用了一段时间&#xff0c;后来不知道什么原因没有用了。估计是那时候写代码的时候多一些&#xff0c;因为它可以直接写代码并运行结果&#xff0c;现在不怎么写代码了。 介绍 后缀名为.ipynb的json格式文件…