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

news2024/11/24 8:34:46

前言:

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

在我们理解了网页中标签是如何嵌套,以及网页的构成之后,

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

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

一、基本步骤

想要获得我们所需的数据分三步

  1. 使用BeautifulSoup解析网页

    Soup = BeautifulSoup(html,‘lxml’)

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

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

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

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

    <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复制出来的路径

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
/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代码爬取网页信息

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

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

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

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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.coloradmin.cn/o/1034726.html

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

相关文章

194、SpringBoot -- 下载和安装 Erlang 、 RabbitMQ

本节要点&#xff1a; 一些命令&#xff1a; 小黑窗输入&#xff1a; rabbitmq-plugins enable rabbitmq_management 启动控制台插件 rabbitmq-server 启动rabbitMQ服务器 管理员启动小黑窗&#xff1a; rabbitmq-service install 添加rabbitMQ为本地服务 启动浏览器访问“h…

Goby 漏洞发布|Revive Adserver 广告管理系统 adxmlrpc.php 文件远程代码执行漏洞(CVE-2019-5434)

漏洞名称&#xff1a;Revive Adserver 广告管理系统 adxmlrpc.php 文件远程代码执行漏洞&#xff08;CVE-2019-5434&#xff09; English Name&#xff1a; Revive Adserver adxmlrpc.php Remote Code Execution Vulnerability (CVE-2019-5434) CVSS core: 9.0 影响资产数&a…

Go sync.Cond 原理

文章目录 前言newCondWaitSignalBroadcast和 channel 比较的优势 前言 sync.Cond 基本很少使用&#xff0c;应为大部分都能使用 channel 代替sync.Cond 通常是基于 sync.Mutex 扩展的主要就四个方法 newCond(l locker) 创建CondWait() 阻塞等待Signal() 唤醒其中一个Broadcast…

AI 编码助手 Codewhisperer 安装步骤和使用初体验

文章作者&#xff1a;为了自己加油 最近亚⻢逊云科技推出了一款基于机器学习的AI编程助手 Amazon Code Whisperer&#xff0c;可以实时提供代码建议。在编写代码时&#xff0c;它会自动根据现有的代码和注释给出建议。Amazon Code Whisperer与 GitHub Copilot 类似&#xff0c;…

Klotski: Efficient Obfuscated Execution against Controlled-Channel Attacks

目录 摘要引言贡献新的基于ORAM的防御控制信道攻击优化技术开源实现 背景Intel SGXORAMRing ORAM的组成ORAM树Position Map (位置图)Stash Ring ORAM的访问步骤1、Position Map Lookup 位置映射查找2、ReadPath3、EvictPath4、Early Reshuffles 早期的重新洗牌 相关工作和动机S…

vue3硅谷甄选01 | 使用vite创建vue3项目及项目的配置 环境准备 ESLint配置 prettier配置 husky配置 项目集成

文章目录 使用vite创建vue3项目及项目的配置1.环境准备2.项目配置ESLint校验代码工具配置 - js代码检测工具1.安装ESLint到开发环境 devDependencies2.生成配置文件:.eslint.cjs**3.安装vue3环境代码校验插件**4. 修改.eslintrc.cjs配置文件5.生成ESLint忽略文件6.在package.js…

gym_unity学习笔记

最近学了一段时间gym_unity&#xff0c;把一些资料留在这里 实例 实例gym_unity训练RollerBall&#xff1a;https://blog.csdn.net/alibutter/article/details/120908687实例gyn_unity训练3DBall&#xff1a;https://zhuanlan.zhihu.com/p/554927641?utm_id0 源码&#xff1…

大数据学习技术栈及书籍推荐

作为一名开发人员&#xff0c;特别是后端开发人员&#xff0c;随着网络数据量的持续增长&#xff0c;拥有强大的大数据处理能力已经成为每个公司或产品&#xff08;尤其是2C业务&#xff09;的必备条件。以下是我在网络上搜集和自身研究的基础上&#xff0c;为您推荐的技术栈和…

【测试开发】用例篇 · 熟悉黑盒测试用例设计方法(2)· 正交表 · 场景设计 · 常见案例练习

【测试开发】用例篇&#xff08;2&#xff09; 文章目录 【测试开发】用例篇&#xff08;2&#xff09;1. 正交表法1.1 什么是正交表1.2 两个重要概念1.3 如何通过正交表设计测试用例1.3.1 充分理解需求1.3.2 确定因素、确定水平1.3.3 allpairs画正交表1.3.4 补充正交表1.3.5 将…

2024年浙江工业大学MPA项目适不适合报考?几点建议

浙江工业大学公共管理硕士&#xff08;MPA&#xff09;项目的学习是在浙工大小和山校区&#xff0c;近两年的发展速度相对比较快&#xff0c;目前每年都可以招到100的生源&#xff0c;而报考的考生也越来越多。究竟这个项目的综合竞争力怎么样&#xff0c;适不适合报考&#xf…

1791_树莓派bash入门杂志_Essentials_Bash_v1

全部学习汇总&#xff1a; GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. (github.com) 拿到一份树莓派早期的宣传电子杂志资料&#xff0c;看了一下感觉还是有一些帮助。针对里面多少有一些共鸣的地方&#xff0c;做一个简单的整理。 1. 命令行…

原来,C语言操作Mysql这么简单

迷途小书童 读完需要 10分钟 速读仅需 4 分钟 1 简介 MySQL 是一种流行的关系型数据库管理系统&#xff0c;而 C 语言是一种强大的编程语言&#xff0c;可以与 MySQL 进行交互。本篇博文将介绍如何使用 C 语言来连接、查询和操作 MySQL 数据库。我们将涵盖原理实现、安装步骤、…

windows/ubuntu怎么修改hosts文件

windows系统修改方法&#xff1a; 第一步&#xff1a;用管理员权限打开记事本&#xff0c;或者visual studio。 第二步&#xff1a;用记事本或者vs打开地址C:\Windows\System32\drivers\etc\hosts文件&#xff0c;这个时候就可以直接修改了 Ubuntu22 LTS系统修改方法&#xf…

c++STL案列一评委打分

案例描述 有5名选手:选手ABCDE&#xff0c;10个评委分别对每一名选手打分&#xff0c;去除最高分&#xff0c;去除评委中最低分&#xff0c;取平均分 实现步骤 1.创建五名选手&#xff0c;放到vector中 2.遍历vector容器&#xff0c;取出来每一个选手&#xff0c;执行for循环…

【自然语言处理】【大模型】MPT模型结构源码解析(单机版)

相关博客 【自然语言处理】【大模型】MPT模型结构源码解析(单机版) 【自然语言处理】【大模型】ChatGLM-6B模型结构代码解析(单机版) 【自然语言处理】【大模型】BLOOM模型结构源码解析(单机版) 【自然语言处理】【大模型】极低资源微调大模型方法LoRA以及BLOOM-LORA实现代码 【…

【云原生】Kubernetes学习笔记

部署 在部署前强调几点 不要使用IPv6, 很多组件都不支持IPv6不要使用最新版本, 最新版本非常不稳定, 甚至可能存在无法运行的bug不要版本更新, 安装后就将版本固定下来, 新的版本可能会引入新功能, 或移除旧功能, 导致Kubernetes无法运行 Kubeadm介绍 K8s是由多个模块构成的…

卸载Visual Studio 2010学习版 —— 卸载VCExpress

目录 最初安装Visual Studio 2010学习版是因为计算机二级 C语言考试而装&#xff0c;现如今考完试后便可卸载掉了&#xff0c;安装简便而卸载却没有uninstall.exe文件。故本文提供卸载方式。 进入到程序目录&#xff0c;找到setup.exe文件&#xff0c;也可以在程序目录搜索set…

Spring Security :一【权限管理概述、Spring Security 认证与授权】

文章目录 Spring Security一、权限管理概述1.1.什么是认证1.2 什么是授权1.3 授权的数据模型RBAC1.3.1 基于角色的访问控制1.3.2 基于资源的访问控制 1.4 权限管理框架1.4.1 Apache Shiro1.4.2 Spring Security1.4.3 Shiro 和 Spring Security 比较 二、Spring Security 认证与…

Simple Factory 简单工厂模式简介与 C# 示例【创建型3.1】【设计模式来了_3.1】

〇、简介 1、什么是简单工厂模式&#xff1f; 一句话解释&#xff1a; 客户类和工厂类严格分工&#xff0c;客户类只需知道怎么用&#xff0c;处理逻辑交给工厂类。 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是日常开发中常用的设计模式。其是一种简单的创…