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.rhkb.cn/news/239785.html

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

相关文章

SpringMVC 文件上传和下载

文章目录 1、文件下载2、文件上传3. 应用 Spring MVC 提供了简单而强大的文件上传和下载功能。 下面是对两者的简要介绍: 文件上传: 在Spring MVC中进行文件上传的步骤如下: 在表单中设置 enctype“multipart/form-data”,这样…

大模型学习与实践笔记(六)

一、finetune 简介 两种微调模式:增量预训练 与指令跟随 1.增量预训练 2.指令微调 二、LoRA 与 QLoRA 介绍 三、XTuner 介绍 四、低显存玩转LLM的方法

这是一篇优雅的Springboot2.0使用手册

这是一篇优雅的Springboot2.0使用手册 最近再研究springboot的原理😋颇有收获,现在让我分享一下springboot如何使用吧~ 啥是Springboot 和书上理解的不同,我认为Springboot是一个优秀的快速搭建框架,他通过maven继承方式添加依…

最佳实践分享:SQL性能调优

SQL性能调优是一个需要不断探索和实践的过程,旨在确保数据库查询的高效运行。本文将分享一些SQL性能调优的最佳实践,帮助您提升数据库性能,减少查询响应时间。 一、索引优化 索引是提高查询性能的关键。以下是一些关于索引优化的建议&#…

<软考高项备考>《论文专题 - 71 风险管理(3)》

3 过程2-识别风险 3.1 问题 4W1H过程做什么是识别单个项目风险以及整体项目风险的来源,并记录风险特征的过程。作用:1、记录现有的单个项目风险,以及整体项目风险的来源:2、汇总相关信息,以便项目团队能够恰当地应对已识别的风险。为什么做…

数据结构之bool类

bool类 bool 是布尔类。它是最简单的一个类,其取值有两种,1和O,即 True 和 False。可以这样简单地理解,除了1和0以及 True 和 False 的情况之外,但凡有值(非空)即为真,但凡无值&…

Komodor:Kubernetes 监控工具全面指南

为了方便起见,Komodor 提供了一个简单的 Web 界面,以帮助您监控 Kubernetes 集群的状态。它拥有付费和免费增值计划,除了在出现问题时通知用户外,还拥有一系列方便的工具,用于跟踪和管理集群中部署的资源的状态。让我们…

预处理/预编译详解(C/C++)

在上一篇的bolg中的编译与链接中提到过预处理,但只是较为简单的讲解,本篇将会对预处理进行详细的讲解。 其中在预处理中很重要的一个一个知识点是#define定义常量与宏,还区分了宏与函数的区别,以及#和##符号,还涉及条件…

Linux第29步_安装“Notepad++”软件

STM32CubeProgrammer脚本文件的后缀为“.tsv”,ST公司官方也叫做FlashLayout。在烧写“TF-A固件”之前,我们需要用“Notepad”软件打开“后缀为.tsv”的脚本文件,根据需求决定哪些文件需要更新,设置好这个脚本文件。 在后期使用S…

【Java SE语法篇】11.异常

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 文章目录 1. 异常的概念和体系结构1.1 异常的概念1.2 异常体系…

【用队列实现栈】【用栈实现队列】Leetcode 232 225

【用队列实现栈】【用栈实现队列】Leetcode 232 225 队列的相关操作栈的相关操作用队列实现栈用栈实现队列 ---------------🎈🎈题目链接 用队列实现栈🎈🎈------------------- ---------------🎈🎈题目链…

信息技术安全评估准则新版标准的变化

文章目录 前言一、GB/T 18336 标准在我国的应用情况(一)以GB/T 18336 标准制定的信息技术产品国家标准(二)GB/T 18336 标准提升了国家关键信息基础设施的整体网络安全保障水平 二、新版 GB/T 18336 标准的变化及应用展望三、标准支…

AttributeError: module ‘openai‘ has no attribute ‘error‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

LaTeX系列3——插入图片

\documentclass[UTF-8]{ctexart} \usepackage{graphicx}\begin{document}在文档中插入图片\includegraphics[width0.5\linewidth]{flower}\end{document} 1.\usepackage{graphicx} 在插入图片之前要先声明我要使用graphicx包,但是我没有查到icx的含义,…

【UE5】交互式展厅数字博物馆交互是开发实战课程

长久以来,我们总是不断被初学者问到类似这样的问题:如何从头到尾做一个交互式程序开发项目?本套课程尝试对这个问题进行解答。 课程介绍视频如下 【UE5】数字展厅交互式开发全流程 【谁适合学习这门课】 本套课程面向初学者,满足…

java注释详解

1、Java 中的注释详解 概括:注释是增加一些说明,在编译后,注释会被抹掉,不起任何租用,只在书写代码的时候,对代码进行的一个说明 不管是那种编程语言, 代码的注释都是必备的语法功能&#xff…

Android PendingIntent 闪退

先来给大家推荐一个我日常会使用到的图片高清处理在线工具,主要是免费,直接白嫖 。 有时候我看到一张图片感觉很不错,但是图片清晰度不合我意,就想有没有什么工具可以处理让其更清晰, 网上随便搜下就能找到&#xff…

数据仓库(3)-模型建设

本文从以下9个内容,介绍数据参考模型建设相关内容。 1、OLTP VS OLAP OLTP:全称OnLine Transaction Processing,中文名联机事务处理系统,主要是执行基本日常的事务处理,比如数据库记录的增删查改,例如mysql、oracle…

视频SDK的技术架构优势和价值

为了满足企业对于高质量视频的需求,美摄科技推出了一款强大的视频SDK(软件开发工具包),旨在帮助企业轻松实现高效、稳定的视频功能,提升用户体验,增强企业竞争力。 一、美摄视频SDK的技术实现方式 美摄视…

Ps:基于单个原色通道的抠图

基于单个原色通道的抠图,指的是:找出主体与背景反差最大的原色通道,然后将其复制为 Alpha 通道,并通过编辑此 Alpha 通道从而完善选区,是一种较简单的基于通道的抠图方法。 ◆ ◆ ◆ 找出反差最大的通道 在“通道”面…