学习Python的第二天之网络爬虫

30岁程序员学习Python的第二天之网络爬虫的信息提取

BeautifulSoup库

地址:https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/

1、BeautifulSoup4安装

在windows系统下通过管理员权限运行cmd窗口
运行pip install beautifulsoup4
在这里插入图片描述
测试实例

import requests
from bs4 import BeautifulSoup
r = requests.get('https://python123.io/ws/demo.html')
print(r.text)
demo = r.text
soup = BeautifulSoup(demo, 'html.parser')
print(soup.prettify())

在这里插入图片描述
注:prettify() 方法将Beautiful Soup的文档树格式化后以Unicode编码输出,每个XML/HTML标签都独占一行

2、BeautifulSoup库基本信息

Beautiful Soup库是解析、遍历、维护“标签树”的功能库
BeautifulSoup库是标签Tag进行解析的。
例:<p calss=“title”> … </p> 每个标签都是成对出现的,并且在第一个标签上可以有多个属性值

可通过以下语句导入beautiful Soup库

from bs4 import BeautifulSoup
或
import bs4
BeautifulSoup的解析器

在这里插入图片描述

BeautifulSoup类的基本元素

在这里插入图片描述

如何通过解析获取每个标签内容

1、获取Tag的名字:<tag>.name

soup = BeautifulSoup(demo, 'html.parser')
print(soup.title.name)

在这里插入图片描述
2、获取Tag的attrs(属性):<tag>.attrs

soup = BeautifulSoup(demo, 'html.parser')
print(soup.a.attrs)
print(soup.a['href'])
print(soup.a['id'])

在这里插入图片描述
3、获取Tag内的NavigableString(非属性字符串):<tag>.string

soup = BeautifulSoup(demo, 'html.parser')
print(r.text)
print(soup.a.string)

在这里插入图片描述
4、获取Tag内字符串的注释部分Comment:

newsoup = BeautifulSoup("<b><!--这是注释--></b><p>这不是注释</p>", "html.parser")
print(newsoup.b.string)
print(type(newsoup.b.string))
print(newsoup.p.string)
print(type(newsoup.p.string))

在这里插入图片描述
Comment是一种特殊的类型,可通过这个判断非属性字符串是否是注释。

3、基于bs4遍历HTML页面的内容

HTMl页面按标签划分是二叉树的形式
在这里插入图片描述
所以在进行HTML内容遍历时,可分为横向遍历和纵向遍历。

纵向遍历
向下遍历

在这里插入图片描述

soup = BeautifulSoup(demo, 'html.parser')
print(soup.head.contents)
print(soup.body.contents)
for child in soup.body.children:print(child)

向上遍历

在这里插入图片描述

soup = BeautifulSoup(demo, 'html.parser')
print(soup.title.parent)
print(soup.html.parent)
for parent in soup.a.parents:if parent is None:print(parent)else:print(parent.name)

在这里插入图片描述

横向遍历

在这里插入图片描述
平行遍历发生在同一个父节点下的各节点间

soup = BeautifulSoup(demo, 'html.parser')
print(soup)
print(soup.title.next_sibling)
print(soup.body.previous_sibling)
for sibling in soup.a.next_siblings:print(sibling)
for prev in soup.a.previous_siblings:print(prev)

在这里插入图片描述

4、基于bs4的HTML的内容查找

搜索方法:find() 和 find_all()

find_all()

<>.find_all(name, attrs, recursive, string, **kwargs)
返回一个列表类型,存储查找的结果
name 对标签名称的检索字符串
可通过name参数进行html页面进行标签名称检索,也可传True,检索全部的标签信息

soup = BeautifulSoup(demo, 'html.parser')
print(soup.find_all('a'))

在这里插入图片描述
attrs: 对标签属性值的检索字符串,可标注属性检索

soup = BeautifulSoup(demo, 'html.parser')
print(soup.find_all('p','course'))
print(soup.find_all(id='link1'))

在这里插入图片描述
recursive: 是否对子孙全部检索,默认True

soup = BeautifulSoup(demo, 'html.parser')
print(soup.find_all('p'))
print(soup.find_all('p', recursive=False))

在这里插入图片描述
string: <>…</>中字符串区域的检索字符串

soup = BeautifulSoup(demo, 'html.parser')
print(soup.find_all(string='Basic Python'))

在这里插入图片描述
扩展方法:
在这里插入图片描述

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

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

相关文章

n8n 键盘快捷键和控制键

n8n 键盘快捷键和控制键 工作流控制键画布操作移动画布画布缩放画布上的节点操作选中一个或多个节点时的快捷键 节点面板操作节点面板分类操作 节点内部操作 n8n 为部分操作提供了键盘快捷键。 工作流控制键 Ctrl Alt n&#xff1a;创建新工作流Ctrl o&#xff1a;打开工作…

keil+vscode+腾讯ai助手

嵌入式软件开发 这个是之前一直想写的开发方式&#xff0c;不过上份工作一直在忙&#xff0c;没有抽出时间花在上面&#xff0c;现在空下来好好写一写吧&#xff01;标题软件安装 关于VSCode以及Keil的安装可以在以下链接中点击浏览 VSCode安装 Keil5安装 CubeMx安装 插件下…

Unity教程(二十三)技能系统 投剑技能(上)基础实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

Oracle01-入门

零、文章目录 Oracle01-入门 1、Oracle简介 &#xff08;1&#xff09;数据库基础 数据库基础请参考&#xff1a;https://blog.csdn.net/liyou123456789/article/details/131207068 &#xff08;2&#xff09;Oracle是什么 ORACLE 数据库系统是美国 ORACLE 公司&#xff…

springboot集成mybatis-plus详细使用

以下是 Spring Boot 集成 MyBatis-Plus 的详细步骤&#xff1a; 创建 Spring Boot 项目 可使用 Spring Initializr 快速创建项目&#xff0c;添加相关依赖。 引入依赖 在项目 pom.xml 文件中添加以下依赖&#xff1a; <!-- MyBatis-Plus 启动依赖 --> <dependenc…

【wsl】命令说明,wsl的虚拟机ubuntu十分好用

wsl官方说明地址 wsl虚拟机安装简单方便&#xff0c;十分推荐。 安装 在上方的官网链接有安装办法和各种操作指南&#xff0c;在此不再赘述。 安装wsl后从微软商店搜索ubuntu点击后就能直接安装虚拟机镜像&#xff0c;多快好省。 wsl命令 阅读官网文档时发现wsl十分强大 …

Open CASCADE学习|判断一点与圆弧的位置关系

一、引言 在计算机辅助设计&#xff08;CAD&#xff09;、计算机图形学以及机械制造等众多领域中&#xff0c;经常需要处理几何图形之间的位置关系判断问题。其中&#xff0c;判断一个点与圆弧的位置关系是一个基础且重要的任务。Open CASCADE 作为一个强大的开源几何建模内核…

<论文>(字节跳动)使用大语言模型进行时间序列理解和推理

一、摘要 本文介绍2024年12月字节跳动牵头发表的大模型论文《ChatTS: Aligning Time Series with LLMs via Synthetic Data for Enhanced Understanding and Reasoning》。论文提出了 ChatTS 模型&#xff0c;用合成数据提升对时间序列的理解和推理能力。作者在纽约出租车乘客数…

大数据应用开发和项目实战-电商双11美妆数据分析

数据初步了解 &#xff08;head出现&#xff0c;意味着只出现前5行&#xff0c;如果只出现后面几行就是tail&#xff09; info shape describe 数据清洗 重复值处理 这个重复值是否去掉要看实际情况&#xff0c;比如说&#xff1a;昨天卖了5瓶七喜&#xff0c;今天卖了5瓶七…

Vi/Vim 编辑器详细指南

Vi/Vim 编辑器详细指南 简介一、模式详解1. 命令模式(Normal Mode)2. 插入模式(Insert Mode)3. 可视模式(Visual Mode)4. 命令行模式(Ex Mode)二、核心操作1. 保存与退出2. 导航与移动3. 编辑与文本操作4. 搜索与替换三、高级技巧1. 多文件与窗口操作2. 宏录制3. 寄存器…

kotlin 01flow-StateFlow 完整教程

一 Android StateFlow 完整教程&#xff1a;从入门到实战 StateFlow 是 Kotlin 协程库中用于状态管理的响应式流&#xff0c;特别适合在 Android 应用开发中管理 UI 状态。本教程将带全面了解 StateFlow 的使用方法。 1. StateFlow 基础概念 1.1 什么是 StateFlow? StateF…

开发搭载OneNet平台的物联网数据收发APP的设计与实现

一、开发环境与工具准备 工具安装 下载HBuilderX开发版(推荐使用开发版以避免插件兼容性问题)安装Node.js和npm(用于依赖管理及打包)配置Android Studio(本地打包需集成离线SDK)项目初始化 创建uni-app项目,选择“默认模板”或“空白模板”安装必要的UI库(如uView或Van…

HHsuite3 的 HHblits 和 HHsearch比较

HHblits 与 HHsearch 的核心区别及远源同源检测能力对比 一、核心功能与定位差异 特征HHblitsHHsearch核心目标快速迭代搜索,构建高质量多序列比对(MSA)和 Profile HMM,用于大规模序列聚类与初步同源筛选。高精度 Profile HMM-HMM 比对,用于深度同源检测与结构 / 功能预测…

【从零开始学习RabbitMQ | 第二篇】生成交换机到MQ的可靠性保障

目录 ​编辑前言 交换机 Direct交换机与Fanout交换机的差异 Topic交换机 Topic交换机相比Direct交换机的差异 生成我们的交换机&#xff0c;队列&#xff0c;以及绑定关系 基于代码去生成交换机和队列 基于注解去声明队列和交换机 消息转换器 消息队列的高可靠性 发送…

LeetCode 热题 100 22. 括号生成

LeetCode 热题 100 | 22. 括号生成 大家好&#xff0c;今天我们来解决一道经典的算法题——括号生成。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求生成所有可能的并且有效的括号组合。这是一道非常经典的回溯法题目&#xff0c;非常适合用来练习递归和回溯的技巧。…

TestStand API 简介

TestStand API 简介 在自动化测试领域&#xff0c;TestStand 凭借其灵活的架构和强大的功能&#xff0c;成为众多开发者的首选工具。而 TestStand API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;则是打开 TestStand 强大功能的 “…

如何修改 JAR 包中的源码

如何修改 JAR 包中的源码 前言一、准备工作二、将 JAR 当作 ZIP 打开并提取三、重写 Java 类方法 A&#xff1a;直接替换已编译的 .class方法 B&#xff1a;运行时类路径优先加载 四、修改 MyBatis&#xff08;或其他&#xff09;XML 资源五、重新打包 JAR&#xff08;命令行&a…

存算一体架构下的新型AI加速范式:从Samsung HBM-PIM看近内存计算趋势

引言&#xff1a;突破"内存墙"的物理革命 冯诺依曼架构的"存储-计算分离"设计正面临根本性挑战——在GPT-4等万亿参数模型中&#xff0c;数据搬运能耗已达计算本身的200倍。存算一体&#xff08;Processing-In-Memory, PIM&#xff09;技术通过‌在存储介…

蓝桥杯15届国赛 合法密码

问题描述 小蓝正在开发自己的 OJ 网站。他要求网站用户的密码必须符合以下条件&#xff1a; 长度大于等于 8 个字符&#xff0c;小于等于 16 个字符。必须包含至少 1 个数字字符和至少 1 个符号字符。 例如 **lanqiao2024!、-*/0601、8((>w<))8** 都是合法的密码。 而…

Jenkins忘记admin密码后的恢复步骤

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 时间较长没有使用…