爬虫day2

bs4解析-HTML语法

bs4解析比较简单,但是呢,首先你需要了解一丢丢的html知识,然后再去使用bs4去提取,逻辑和编写难度就会非常简单和清晰.
HTML(Hyper Text Markup Language)超文本标记语言,是我们编写网页的最基本也是最核心的一种语言.其语法规则就是用不同的标签对网页上的内容进行标记,从而使网页显示出不同的展示效果
<h1>
        我爱你
</h1>
上述代码的含义是在页面中显示“我爱你"三个字,但是我爱你三个字被"<h1>"和"</h1>"标记了.白话就是被括起来了被H1这个标签括起来了,这个时候,浏览器在展示的时候就会让我爱你变粗变大,俗称标题,所以HTML的语法就是用类似这样的标签对页面内容进行标记,不同的标签表现出来的效果也是不一样的.
h1一级标题
h2:二级标题
p:段落
font:字体(被废弃了,但能用)
body:主体

比如:

<h1>i love you</h1>
<h1 align="center'>i don't love you</h1>
# h1: 标签
# align:属性
# center:属性值<标签 属性=“属性值">被标记的内容</标签>
<标签:/><imgsrc=''xxx.jpg"/>
<br />
<a href="http://www.baidu.com">周杰伦</a>

总结,

html语法:
<标签     属性="值”   属性="值">

          被标记的内容

</标签>

有了这些知识,我们再去看bs4就会得心应手了.因为bs4就是通过标签和属性去定位页面上的内容的.

<div id="1'class="h1">周杰伦</div>
<div id="2"class="h1">林俊杰</div>
<div id="3"class='h1'>麻花藤</div>
<div id="4"class='h1">天老鸭</div>
<div id="5"class="h4">李多海</div>
<div id="5"class="h5">厉害多</div>
<span>xxxxx</span>

# 通过标签名称来拿到数据

# div -> id:3 => 麻花藤

#div-> class:h4=> 李多海

bs4

安装

pip install beautifulsoup4

Beautiful soup 简介
Beautiful Soup 是一个用于从 HTML和 XML 文件中提取数据的 Python 模块。Beautiful Soup 提供一些简单的函数用来处理导航、搜索、修改分析树等功能。Beautiful Soup 模块中的查找提取功能非常强大,而且非常便捷。Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档转换为 UTF-8 编码。

使用:

 

Tag 通俗点讲就是 HTML 中的一个个标签。

<html>
<head)<title>百度</title>
</head>
<body><a class="item" href="https://www. baidu. com" id="baidu">百度</a><p class="story"><b〉百度一下,你就知道</b></p><p class="introduce”>全球最大的中文搜索引擎、致力于让网民更便捷地获取</p>
</body>
</html>

上面的 head、title、body、a和p等HTML标签,以及里面包括的内容都是 Tag。

使用 Beautiful soup 获取节点对应的代码:

#创建一个BeautifulSoup对象,获取页面正文
soup = BeautifulSoup(html_doc, features='lxml’)
print('head节点内容为:\n',soup.head)# 打印head节点
print('title节点内容为:\n',soup.title) # 打印title节点
print('body节点内容为\:n',soup.body) # 打印body节点
print('a节点内容为:\n',soup.a) # 打印a节点
print('p节点内容为:\n’,soup.p) # 打印p节点

使用 Beautiful soup 获取节点名称:

除了通过指定节点名称的方式获取节点内容以外,还可以使用name属性获取节点的名称。关键代码如下:

print(soup.head.name)  #  打印head节点名称
print(soup.title.name)  # 打印title节点名称 
print(soup.body.name) # 打印body节点名称
print(soup.a.name)  # 打印a节点名称
print(soup.p.name) # 打印p节点名称

使用 Beautiful soup 获取节点属性:

调用 attrs 属性即可获取这个节点下的所有属性。关键代码如下:

print('a节点中属性',soup.a.attrs)  #打印a节点属性
print('p节点中属性',soup.p.attrs)  #打印p节点属性

使用 Beautiful soup 获取节点属性:

attrs 的返回结果为字典类型,字典中的元素分别是属性名称与对应的值。所以在 attrs后面添加0括号并在括号内添加属性名称即可获取指定属性对应的值。关键代码如下:

print('a节点中id属性对应的值',soup.a.attrs['id’]) # 打印a节点中id属性对应的值
print('p节点中class属性对应的值',soup.p.attrs['class’])#打印p节点中class属性对应的值

Beautiilsoup对象表示的是一个文档的内容。大部分时候,可以把它当作 Tag对象,是一个特殊的 Tag,我们可以分别获取它的类型、名称以及属性。关键代码如下:

print(type(soup)) #打印数据类型
print(soup.name)  #打印名称
print(soup.attrs) #打印属性

Comment对象是一个特殊类型的 NavigableString对象,其输出的内容不包括注释符号.

from bs4 import BeautifulSoup #导BeautifulSoup库#创建模拟HTML代码的字符串
html_doc =’<b><!--百度一下,你就知道--></b>
#创建一个BeautifulSoup对象,获取页面正文
soup = BeautifulSoup(html_doc, features=’lxml’)
comment=soup.b.string   #获取b节点所包含的文本内容
print(comment)    #打印b节点所包含的文本内容
print(type(comment))   #打印数据类型

实例:

import requests
from bs4 import BeautifulSoup
import csvurl ="http://www,xinfadi,com.cn/marketanalysis/0/list/1.shtml"
resp = requests.get(url)f = open("菜价.csv", mode="w")
csvwriter = csv.writer(f)# 解析数据
# 1.把页面源代码交给BeautifulSoup进行处理,生成bs对象page = BeautifulSoup(resp.text,"html.parser")     # 指定html解析器# 2.从bs对象中查找数据
# find(标签,属性=值),返回一个
# find _all(标签,属性-值),返回一堆
# table = page.find("table", class_="hq_table")  #class是python的关键字
table = page.find("table", attrs={"class": "hq_table"})  # 和上一行是一个意思
#拿到所有数据行
trs = table.find_all("tr")[1:]
for tr in trs:   # 每一行tds = tr.find_all("td")   # 拿到每行中的所有tdname = tds[0].text  # .text 表示拿到被标签标记的内容low = tds[1].text  # .text 表示拿到被标签标记的内容avg = tds[2].text  # .text 表示拿到被标签标记的内容high = tds[3].text  # .text 表示拿到被标签标记的内容gui = tds[4].text  # .text 表示拿到被标签标记的内容kind = tds[5].text  # .text 表示拿到被标签标记的内容date = tds[6].text  # .text 表示拿到被标签标记的内容
print(name,low,avg,high,gui,kind,date)

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

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

相关文章

中间件(express)

中间件&#xff08;express&#xff09; 在Express.js中&#xff0c;中间件&#xff08;Middleware&#xff09;是一个重要的组成部分&#xff0c;用于处理HTTP请求和响应。中间件函数具有特定的签名&#xff0c;并可以接受请求对象&#xff08;req&#xff09;、响应对象&…

[python学习]--使用相对路径导入包

在Python中&#xff0c;使用相对路径导入包或模块通常是在包内部进行的&#xff0c;以便在不指定完整包路径的情况下引用同一包内的其他模块。相对导入使用点&#xff08;.&#xff09;来表示当前包或父包。但是&#xff0c;需要注意的是&#xff0c;相对导入在包的外部&#x…

【idea】gradle多模块构建项目内存溢出终止问题解决

背景 idea构建多模块项目&#xff0c;构建报错 Daemon is stopping immediately JVM garbage collector thrashing and after running out of JVM memory 解决 进到下图目录下 在文件管理中进入上面目录添加gradle.properties文件&#xff0c;内容如下 org.gradle.jvmargs-…

【TensorFlow深度学习】在深度学习项目中实施迁移学习策略

在深度学习项目中实施迁移学习策略 在深度学习项目中实施迁移学习策略:加速模型训练与提升性能的艺术1. 迁移学习简介与优势2. 迁移学习的类型3. 代码示例:使用Keras实施特征提取4. 微调模型以进一步提升性能5. 结果评估与模型保存结语在深度学习项目中实施迁移学习策略:加速…

hive on spark 的架构和常见问题 - hive on spark 使用的是 yarn client 模式还是 yarn cluster 模式?

hive on spark 的架构和常见问题 - hive on spark 使用的是 yarn client 模式还是 yarn cluster 模式&#xff1f; 1. 回顾下 spark 的架构图和部署模式 来自官方的经典的 spark 架构图如下&#xff1a; 上述架构图&#xff0c;从进程的角度来讲&#xff0c;有四个角色/组件&…

【面试干货】抽象类与接口的区别

【面试干货】抽象类与接口的区别 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java编程中&#xff0c;抽象类和接口是两个非常重要的概念&#xff0c;它们都为代码的可扩展性和复用性提供了基础。但是&#xff0c;它们之间也有一些明显…

架构师之 Kafka 核心概念入门

Kafka 核心概念 作为架构师,理解 Kafka 的核心概念至关重要。这些概念是构建高效、可靠的 Kafka 系统的基础。 以下是需要掌握的 Kafka 核心概念及其详细说明: 1. Topic 定义:Topic 是 Kafka 中用于存储和分类消息的逻辑命名空间。每个 Topic 代表一类数据流, 例如日志、…

maxwell源码编译安装部署

目录 1、组件环境 2、maxwell安装前提 3、maxwell安装 3.1、maxwell下载 3.1.1、最新版本下载 ​编辑 3.1.2、历史版本下载 3.2、maxwell安装 3.3、maxwell配置 3.2.1、mysql开启binlog 3.3.2、maxwell元数据配置 3.3.3、maxwell配置任务 4、maxwell部署问题 4.1、utf…

django学习入门系列之第三点《CSS基础样式介绍1》

文章目录 高度和宽度块级标签|行内标签的转换字体和颜色往期回顾 高度和宽度 如果在块级标签内&#xff0c;单独定义高度的话&#xff0c;宽度会默认拉满 使用百分比的时候 如果是块级标签&#xff0c;宽度可以用百分比&#xff0c;高度用不了&#xff08;使用起来没效果&…

Mac OS 安装frida

安装frida和frida-tools Python是基础&#xff0c;提前装好Python 终端执行 python3 -m pip install frida 如果出现error 按照提示处理 信息提示&#xff1a;brew install pipx 于是终端执行&#xff1a; brew install pipx 安装frida&#xff1a; pipx install frida…

jetson设置

首先准备一张16g以上的sd卡 点此下载sd套件 https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip 这里下载sd卡格式化 然后https://etcher.download/download-etcher/ 下载etcher 看这篇https://blog.csdn.net/automoblie0/article/deta…

Apache Flink在IoT指标开发流处理全过程案例

目录 1. 环境搭建与基本概念 2. 数据摄入 3. 数据解析与转换 4. 定义时间窗口与计算 5. 复杂事件处理 6. 数据输出与存储 7. 整合流程与执行 8. 性能调优与监控 在物联网(IoT)领域,Apache Flink作为强大的流处理框架,能够高效地处理从传感器、设备等来源产生的海量实…

uniapp实现tabBar功能常见的方法

在 UniApp 中实现 Tab 功能通常涉及到使用 <navigator> 组件结合 tabBar 配置&#xff0c;或者通过自定义的视图切换逻辑来实现。以下是两种常见的实现方式&#xff1a; 1. 使用 tabBar 配置 UniApp 支持在 pages.json 文件中配置 tabBar&#xff0c;以在应用的底部或顶…

VMware ESXi 8.0U2c macOS Unlocker OEM BIOS Huawei (华为) FusionServer 定制版

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS Huawei (华为) FusionServer 定制版 ESXi 8.0U2 标准版&#xff0c;Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士通)、NEC (日电)、Huawei (华为)、xFusion (超聚…

前端vue实战项目结构、常用编辑器vs code 配置

5.Complete JSDoc Tags 6.Custom CSS and JS Loader 7.Debugger for Chrome 8.EditorConfig for VS Code 9.ESLint ☆☆☆ 10.gitignore 11.GitLens — Git supercharged 12.npm 13.PostCSS syntax !important 14.Vetur ☆ 15.vscode-icons 16.vue-i18n 17.Markdow…

2024年最值得推荐的10款免费数据可视化工具!

数据可视化之所以受欢迎&#xff0c;不仅因为它简化了我们查看繁杂数据的方式&#xff0c;还在于数据可视化可以加快我们获取数据信息的速度。但是对于初学者来说&#xff0c;使用数据可视化工具并不能够快速上手。因此本篇文章特意为大家列出了10款免费的数据可视化工具&#…

html做一个画柱形图的软件

你可以使用 HTML、CSS 和 JavaScript 创建一个简单的柱形图绘制软件。为了方便起见&#xff0c;我们可以使用一个流行的 JavaScript 图表库&#xff0c;比如 Chart.js&#xff0c;它能够简化创建和操作图表的过程。 以下是一个完整的示例&#xff0c;展示如何使用 HTML 和 Cha…

码蹄集 BD202401 补给

错误解法&#xff1a;简单将取半前后的综合排序后取最小值&#xff0c;这样没有考虑这样一种情况&#xff1a;取半的时机不对&#xff0c;也许取半某个大一点的P之后反而能进一步取一个补给点了呢&#xff1f;&#xff1f;对不对。这样简单排序只不过是“最省钱”的一种&#x…

人机交互的AB面

每个人都有AB面&#xff0c;每个技术也是如此&#xff0c; 人机交互作为一个多学科的领域&#xff0c;其AB面可以理解为它的优势和劣势&#xff0c;或者积极和消极的影响。以下是人机交互的AB面&#xff1a; A面&#xff08;优势/积极面&#xff09;&#xff1a; 提高效率和生产…

Cocos引擎加密方案解析

据2023年数据显示&#xff0c;Cocos引擎全球游戏市场的占有率约为20%&#xff0c;国内手游占有率约为40%&#xff0c;在国内手游市场中&#xff0c;不少热门游戏均为Cocos引擎研发&#xff0c;如《捕鱼达人》、《梦幻西游》、《剑与远征》等。 而在近年来国内火热的小游戏赛道…