首页 > 其他分享 >数据解析-bs4、xpath

数据解析-bs4、xpath

时间:2024-04-03 15:00:15浏览次数:30  
标签:xpath bs4 标签 soup tag div 解析 class

爬虫网页解析方法1:bs4

#导入

from bs4 import BeautifulSoup

#创建一个解析对象, page_text是网络请求到的页面源码数据

soup = BeautifulSoup(page_text,'lxml') 

#调用BeautifulSoup相关属性和方法进行数据提取

#标签定位-方式1:   soup.tagName(只可以定位到第一次出现的该标签)
title_tag = soup.title
p_tag = soup.p

#标签定位-方式2(属性定位):   soup.find(tagName,attrName='value')
#注意:find只可以定位满足要求的第一个标签,如果使用class属性值的话,find参数class_
#定位到了class属性值为song的div标签
div_tag = soup.find('div',class_='song')
#定位到class属性值为du的a标签
a_tag = soup.find('a',class_='du')
#定位到了id的属性值为feng的a标签
a_tag = soup.find('a',id='feng')

#标签定位-方式3(属性定位):   soup.find_all(tagName,attrName='value')
#注意:find_all可以定位到满足要求的所有标签
tags = soup.find_all('a',class_='du')


#标签定位-方式4(选择器定位):   

--常用的选择器:class选择器(.class属性值)  id选择器(#id的属性值)
tags = soup.select('#feng') #定位到id的属性值为feng对应的所有标签
tags = soup.select('.du') #定位到class属性值为du对应的所有标签
#层级选择器:>表示一个层级  一个空格可以表示多个层
tags = soup.select('.tang > ul > li > a')
tags = soup.select('.tang a')
 

#定位到标签内部数据的提取
#方式1:提取标签内的文本数据
    #tag.string:只可以将标签直系的文本内容取出
    #tag.text:可以将标签内部所有的文本内容取出
tag = soup.find('a',id='feng')
content = tag.string

div_tag = soup.find('div',class_='tang')
content = div_tag.text

#方式2:提取标签的属性值 tag['attrName']
img_tag = soup.find('img')
img_src = img_tag['src']
print(img_src)

爬虫网页解析方法2:xpath

#导入

from lxml import etree

#创建解析对象

tree = etree.parse('test.html')

#调用etree对象的xpath方法结合着不同形式的xpath表达式,进行标签定位和数据提取

#xpath函数返回的是列表,列表中存储的是满足定位要求的所有标签
#/html/head/title定位到html下面的head下面的title标签
title_tag = tree.xpath('/html/head/title')
#//title在页面源码中定位到所有的title标签
title_tag = tree.xpath('//title')


#属性定位
#定位到所有的div标签
div_tags = tree.xpath('//div')
#定位到class属性值为song的div标签 //tagName[@attrName='value']
div_tag = tree.xpath('//div[@class="song"]')


#索引定位://tag[index]
    #注意:索引是从1开始的
div_tag = tree.xpath('//div[1]')


#层级定位
    # /表示一个层级  //表示多个层级
a_list = tree.xpath('//div[@class="tang"]/ul/li/a')
a_list = tree.xpath('//div[@class="tang"]//a')

#数据提取
    #1.提取标签中的文本内容:/text()取直系文本  //text()取所有文本
a_content = tree.xpath('//a[@id="feng"]/text()')[0]
div_content = tree.xpath('//div[@class="song"]//text()')
    #2.提取标签的属性值://tag/@attrName
img_src = tree.xpath('//img/@src')[0]

标签:xpath,bs4,标签,soup,tag,div,解析,class
From: https://blog.csdn.net/palmer0/article/details/137345521

相关文章

  • mathematical-expression(MAE)数学表达式 数学函数 解析编译库,有效的快速和简单易用的数
    数学表达式SwitchtoEnglishDocument介绍本框架是一种针对数学公式解析的有效工具,能够解析包含嵌套函数,包含函数,数列步长累加等数学公式,返回值是一个数值的结果对象,同时也可以进行比较运算的操作,再进行比较的时候,返回值是一个布尔值结果对象。PS请尽量使用1.3.1版......
  • TPS上不去案例解析
    案例1.TPS原因上不去原因:磁盘满了分析:**磁盘的监控**iostat-xm5(以兆为单位5秒刷新一次) rs,ws每秒读写情况Await等待的时间Svctm磁盘服务时间百分比%util磁盘总占用率(sda盘%util超过了80%,那么sda盘到了瓶颈)解决:加硬件 2.TPS原因上不去原因:系统采用sprin......
  • heapsnapshot文件解析
    简介网页test.html<doctypehtml><!--html5版本申明,需要写在文档的第一行--><html> <head> <metacharset="utf-8"/> <title>标题:基础语法</title> <linkrel="stylesheet"href="引入CSS文件的路径"/> &l......
  • 全方位解析ChatGPT:如何培养 AI 智能对话技能?
    简介ChatGPT的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达的越清晰,给到的信息越多,那么沟通就越顺畅。和ChatGPT沟通也是同样的道理,如果想要ChatGPT给到的信息越准确,越清晰,和它的沟通就至关重要。如何能和Chat......
  • 知识图谱技术的深度解析与应用前景展望
    在数字化时代,信息爆炸式增长,如何有效地组织、存储和查询知识成为了一个亟待解决的问题。知识图谱作为一种新型的知识表示和组织方式,正逐渐成为信息领域的研究热点。本文将对知识图谱的技术原理、构建方法以及应用前景进行深度解析,旨在为读者提供一个全面而深入的了解。一、知识图......
  • 解析基础设施即代码:重新定义云管理
    由于现代架构、应用程序接口和相互关联的服务之间的互联性越来越强,云基础设施的复杂性也与日俱增。随着需要管理的云资源数量不断增加,企业开始采用基础设施即代码(IaC)来解决云应用的复杂性和相互依赖性问题。 IaC提供各种工具、流程和方法,以简化基础设施管理、降低风险并采用新......
  • WPF开发分页控件:实现可定制化分页功能及实现原理解析
    概要本文将详细介绍如何使用WPF(WindowsPresentationFoundation)开发一个分页控件,并深入解析其实现原理。我们将通过使用XAML和C#代码相结合的方式构建分页控件,并确保它具有高度的可定制性,以便在不同的应用场景中满足各种需求。一.简介分页控件是在许多应用程序中常见......
  • ClickHouse深度解析 一般有用 看1 速
    一、什么是ClickHouse?ClickHouse由俄罗斯第一大搜索引擎Yandex于2016年6月发布,开发语言为C++,ClickHouse是一个面向联机分析处理(OLAP)的开源的面向列式存储的DBMS,简称CK,与Hadoop、Spark这些巨无霸组件相比,ClickHouse很轻量级,查询性能非常好,使用之后会被它的性能折服,非常值......
  • ThreadLocal源码解析
    方法三个主要方法:getsetremove讲三个方法前,现需要知道Thread,ThreadLocal,ThreadLocalMap三个之间的关系,首先ThreadLocalMap虽然是ThreadLocal中定义的静态内部类,但实际的ThreadLocalMap实例是作为Thread对象的一个字段存在的。这样设计的目的是允许每个线程存储自己......
  • mysql配置文件解析
     mysql服务启动默认使用的配置文件路径mysqld--verbose--help|grepcnfmy.cnf配置文件字段解析[client]port=3306socket=/tmp/mysql.sock[mysqld]port=3306socket=/tmp/mysql.sockbasedir=/usr/local/mysqldatadir=/data/mysqlpid-file=/data/mys......