Python爬虫教程——解析网页中的元素

news/2024/7/19 10:41:28 标签: python, 爬虫, 开发语言

前言:
嗨喽~大家好呀,这里是小曼呐 ~
在这里插入图片描述
在我们理解了网页中标签是如何嵌套,以及网页的构成之后,

我们就是可以开始学习使用python中的第三方库BeautifulSoup筛选出一个网页中我们想要得到的数据。

接下来我们了解一下爬取网页信息的步骤。

一、基本步骤

想要获得我们所需的数据分三步
使用BeautifulSoup解析网页

Soup = BeautifulSoup(html,‘lxml’)

描述想要爬去信息的东西在哪里。

信息 = Soup.select(‘???’)

要知道它叫什么名字,如何去定位。

从标签中获得你想要的信息

<p>Something</p> 从标签中获取我们需要的信息,去掉一些没有用的结构,

并且把我们获取的信息按照一定格式装在数据容器中,方便我们去查询。

二、两种路径获得方式详解

接下来,我们首先进行第一步,如何使用BeautifulSoup解析网页

Soup = BeautifulSoup(html,'lxml')

实际上我们构造一个解析文件需要一个网页文件和解析查询库。

就好比左边的Soup是汤,html是汤料,而lxml是食谱。

今天我们需要讲的BeautifulSoup,通过我们告诉它元素的具体的位置,就可以向他指定我们想要爬去的信息。

找到相应的元素右键检查的,看到元素的代码信息进行右击,我们有两种方式获得标签的位置的具体描述方式

1.使用copy selector

2.使用copy XPath

这两种复制的路径有什么区别,接下来就让大家看一下

右键标签copy selector复制出来的路径

body > div.body-wrapper > div.content-wrapper > div > div.main-content > div:nth-child(15) > a

右键标签copy XPath复制出来的路径

'''
完整源码、解答、教程皆+VX:Python10010验证码“M”获取
'''
/html/body/div[4]/div[2]/div/div[2]/div[14]/a

这两种不同的路径描述方式,使用copy selector复制出来的路径叫做 CSS Selector,使用copy XPath复制出来的叫做XPath。

这两种路径的描述方式在今后的学习中我们都可以用的到,但是我们今天要学习的BeautifulSoup它只认第一种,就是CSS Selector。

但是为了方便我们以后的学习,更好认识网页间不同元素的结构,我们先讲一下XPath,在学习了它之后,CSS Selector也会更好的理解,同时日后我们需要学习的一些库也需要用到XPath去描述一些元素的位置。

XPath

1.什么是XPath

Xpath使用路径表达式在XML文档中进行导航,解析到路径跟踪到的XML元素。

2.XPath路径表达式

路径表达式是xpath的传入参数,xpath使用路径表达式对XML文档中的节点(或者多个节点)进行定位。

路径表达式类似这种:/html/body/div[4]/div[2]/div/div[2]/div[14]/a 或者 /html/body/div[@class=”content”] ,其中第二个路径中的[@class=”content”] 是为了在多个相同标签中定位到一个标签。

刚才拿到的那个XPath的路径 /html/body/div[4]/div[2]/div/div[2]/div[14]/a,就针对于这一串来讲,拿到的这个元素的完整路径,叫做绝对路径,其中每个‘/’就是一个节点,
下面我们通过这个结构图我们可以简单了解一下。
在这里插入图片描述
为了更清楚地了解各个节点之间的关系,通过下面的图片我们可以更直观的了解。
在这里插入图片描述
html是父节点相对于下面的节点是父节点,下面的body和head相对于html是是子节点,div标签相对于html标签是子孙节点。

其中body又相当于div标签的子节点,div标签之间是兄弟节点,基本的结构以及等级就是这样。

CSS Selector

1.什么是CSS Selector

Css Selector定位实际就是HTML的Css选择器的标签定位。

顾名思义CSS selector就是一种按照样式进行选择的一种标签选择方式。

2.CSS Selector路径表达式

在css selector路径中,最开始的路径是body,不像是XPath中最开始的是html,我们拿到刚才的那个路径看一下。

body > div.body-wrapper > div.content-wrapper > div > div.main-content > div:nth-child(15) > a

在这个路径中,在第一个div后面加了一个.body-wrapper,这个就是这个标签的样式,这种选择方式是按照样式进行选择的。

如果说XPath的路径是按照:谁,在哪,第几个的选择方式

那么CSS Selector是按照:谁,在哪,第几个,长什么样子进行选择

python_107">三、使用python代码爬取网页信息

通过刚才我们队网页中各种元素的路径认识之后,我们就可以简单的使用python的BeautifulSoup库进行代码级别实现网页信息爬取,废话不多说,直接上代码。

这里是爬去信息的网页就使用之前我进行联系的网页,网页源码的地址在:

打开本地网页的方式建议使用pycharm中新建一个html文件将源代码复制进去,如果使用自带的记事本需要把保存格式改为utf-8。

'''
完整源码、解答、教程皆+VX:Python10010验证码“M”获取
'''
import requests
from bs4 import Beautifulsoup as bs
#1.使用Beautifulsoup解析网页
with open('./ddw.html','r',encoding='utf-8') as wb data:
#我使用的是本地文件所以使用open函数打开本地路径下面的网页
Soup = bs(wb data,"1xml 这里构造的是解析文件,w data是我们要解析的网页,1xm1是解析库
# images = Soupselect( body ) diy:nth-child(2) > div.body > div.body moth > div:nth-child(6) > div:nth-child(1) > img
#这里使用Soup的方法,直接在select后面括号里添加相应的路径就可以。在这里就拿到图片的信息
#但是这行代码会有出错信息,我们只需按照出错信息中的处理方式进行修改即可
images = Soup.select(
'body > div:nth-of-type(2) > div.body > div.body moth > div > div:nth-of-type(1) > img
#通过上面那一行代码我们拿到了正确的图片信息,不过们把其倒数二个div的标签的CSs样式删除,这样就不再定位到单个图片,
#就直接把所有同类型的图片筛选出来,为什么要删倒数第
个div的css样式,因为这个div标签的兄弟标签是其他图片标签的父标签
titles = Soup.select('body ) div:nth-of-type(2) > divhead top ) div.head top ee ) ul > li > a'
#再童到这网页中的标题信息,同样的为了皇到所有的同类标题标签,根据位置信息删除1i标签的C55样式
# print(images,titles,sep=' r-.
I1131
for image,title in zip(images,titles):
data = !
"image': image.get( 'src')
'title': title.get text().
print(data)

到这里,简单的网页信息爬取就完成了,我们通过这串代码拿到了网页中商品图片的地址,以及网页中分类标签,这次仅仅进行简单信息的爬取

尾语
最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

夜色难免黑凉,前行必有曙光(让我们一起努力叭)
在这里插入图片描述


http://www.niftyadmin.cn/n/5056914.html

相关文章

k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD

测试环境使用的jenkins 正式环境使用的gitlab-ci 测试环境 创建yaml文件 apiVersion: v1 kind: ConfigMap metadata:name: dtk-go-tiktok-admin-configlabels:app.kubernetes.io/name: dtk-go-tiktok-adminapp.kubernetes.io/business: infrastructureapp.kubernetes.io/run…

WebGL笔记:WebGL中绘制圆点,设定透明度,渲染动画

WebGL 绘制圆点 基于片元着色器来画圆形片元着色器在屏幕中画图是基于一个个的像素的每次画一个像素时&#xff0c;都会执行片元着色器中的main方法那么&#xff0c;我们就可以从这一堆片元中(n个像素点)找出属于圆形的部分片元的位置叫做 gl_PointCoord (一个点中片元的坐标位…

kafka消息队列简单使用

下面是使用Spring Boot和Kafka实现消息队列的简单例子&#xff1a; 引入依赖 在pom.xml中添加以下依赖&#xff1a; <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.7.5&l…

零基础学前端(七)将HTML+CSS静态页面 发布成网站

我们学习了HTML和CSS&#xff0c;已经可以做出精美的静态网页。我们不慌学习JavaScript&#xff0c;因为Javascript的作用是为网页增加动作和数据交换&#xff0c;只能让网页更完美而已&#xff0c;现在网页的基础我们已经可以搭建&#xff0c;我们不妨先将网站发布出去&#x…

什么是数学建模(mooc笔记)

什么是数学建模 前提&#xff1a;我们数学建模国赛计划选择C题&#xff0c;故希望老师的教学中侧重与C题相关性大的模型及其思想进行培训。之后的学习内容中希望涉及以下知识点&#xff1a; logistic回归相关知识点。如&#xff1a;用法、适用、限制范围等。精学数学建模中常…

Linux或Centos查看CPU和内存占用情况_top只能查看对应的命令_如何查看具体进程---linux工作笔记062

一般我们都是用top去查看,但是top查看的结果,不能看出,具体是哪个程序占用的,这就很苦恼.. 其实如果有时间的话,再去专门看一下网络安全和linux脚本以及命令方面的,比较系统的看一下比较好.现在积累的都是工作中用到的,比较零散的知识. 如果用top,比如说这里的java,就只能知道…

Pytorch中关于forward函数的理解与用法

目录 前言1. 问题所示2. 原理分析2.1 forward函数理解2.2 forward函数用法 前言 深入深度学习框架的代码&#xff0c;发现forward函数没有被显示调用 但代码确重写了forward函数&#xff0c;于是好奇是不是python的魔术方法作用 1. 问题所示 代码如下所示&#xff1a; cla…

基于Linux 系统聊天室登录与注册实现(03)

上一篇我们已经讲了如何搭建一个多线程的服务器模型&#xff0c;可以支持多个客户端同时连接服务器&#xff0c;本篇我们来实现多个客户端&#xff0c;如何实现向服务器注册信息&#xff0c;并实现登录的功能。 数据结构 接着上一篇的实例代码继续增加功能。要实现注册和登录…