数据定位

举报
developer_Li 发表于 2025/03/25 11:17:40 2025/03/25
【摘要】 数据提取• 使用爬虫程序向目标主机发送请求后获取的响应大多是json和HTML格式的数据。– Json数据可以通过json和jsonpath模块进行操作。– HTML代码需要进行数据定位。爬虫中的数据定位• 在静态网页中,数据已经存在于网页中,而爬虫在获得响应以后会拿到带有数据的字符串(网页的html代码),可以使用re模块和正则表达式等工具去定位网页中的数据,然后进行提取。re.searc...

数据提取
• 使用爬虫程序向目标主机发送请求后获取的响应大多是json和HTML格式的数据。
– Json数据可以通过json和jsonpath模块进行操作。
– HTML代码需要进行数据定位。

爬虫中的数据定位
• 在静态网页中,数据已经存在于网页中,而爬虫在获得响应以后会拿到带有数据的字符串(网页的html代码),可以使用re模块和正则表达式等工具去定位网页中的数据,然后进行提取。
re.search(".*?")

Xpath
• Xpath,全称 XML Path Language,即 XML 路径语言,可以在XML和HTML文档中进行信息搜索。
• Xpath 的选择功能十分强大,它提供了非常简洁明了的路径选择表达式。另外,它还提供了超过 100 个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有想要定位的节点都可以用 XPath 来选择。

Xpath使用 (1)
• 获取HTML文本。
– lxml.etree.HTML:HTML文本修正,自动补全html文本,创造一个xpath解析对象。
– HTML.tostring:输出修正后的html文本(结果是 bytes 类型)。
• 构造路径表达式。
• HTML.xpath()

Xpath使用 (2)
• html = requests.get(url):
– 创建xpath解析对象:html = etree.HTML(html.text);
– 查看html字符串:etree.tostring(html);
– 解析数据:html.xpath(s)。
• s:xpath表达式。

Xpath语法
表达式 描述
nodename 选中该元素。
/ 从根节点选取、或者是元素和元素间的过渡。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
text() 选取文本。
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。

Xpath数据提取 (1)
路径表达式 结果
//title[@lang=“zh"] 选择lang属性值为zh的所有title元素。
/div/a[2] 选取属于 div 子元素的第二个 a 元素。
/div/a[last()] 选取属于 div 子元素的最后一个 a 元素。
/div/a[last()-1] 选取属于 div 子元素的倒数第二个 a 元素。
/div/a[position()>1] 选择div下面的a元素,从第二个开始选择

Xpath数据提取 (2)
路径表达式 结果
//p/title[text()=Python']
选择所有p下的title元素,仅仅选择文本为Python的title元素。
/div/book[price>35.00]
/title
选取 div 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
/div/* 选取 div 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。

BeautifulSoup4
• BeautifulSoup4(简称bs4):是一个可以从HTML或XML文件中提取数据的Python库。它提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。
• 相对于正则表达式和xpath而言,bs4是最为简单的一个数据提取工具。但是效率相对较低。

BeautifulSoup4中的对象
• Tag对象:是html中的一个标签,用BeautifulSoup就能解析出来Tag的具体内容,具体的格式为‘soup.name‘,其中name是html下的标签。
• BeautifulSoup对象:整个html文本对象,可当作Tag对象。
• NavigableString对象:标签内的文本对象。
• Comment对象:是一个特殊的NavigableString对象,如果html标签内存在注释,那么它可以过滤掉注释符号保留注释文本。
• 最常用的还是BeautifulSoup对象和Tag对象。

BeautifulSoup4基本使用
• 创建 Beautiful Soup 对象:
– soup = BeautifulSoup(html)# 加载获取的网页源码。
– soup = BeautifulSoup(open(‘index.html’))# 获取本地文件中html。
• 搜索文档树:
– soup.find(tag):查找tag,返回第一个符合条件的tag。
– soup.find_all(tag):查找所有tag,并返回一个列表。
– Tag可以是一个字符串、一个列表、一个正则表达式或者是html标签中的一个属性。

BeautifulSoup对象的常用属性和方法
• soup.prettify():格式化输出 BeautifulSoup对象的内容。
• soup.title:获取title标签的所有内容。
• soup.title.name:获取title标签的name属性。
• soup.head:获取head标签中的所有内容。
• soup.a:获取a标签中的所有内容。
• soup.a[“id”]:获取第一个a标签的id的值。

CSS选择器
• Bs4不仅可以通过标签来获取数据,还可以使用CSS选择器,即通过CSS属性,如class、id等定位数据。
– soup.select(‘a’) :通过标签选择器定位数据。
– soup.select(‘.box’):通过类选择器定位数据。
– soup.select(‘#box1’):通过id选择器定位数据。
– soup.select(‘a #box1’):层架选择器。
– soup.select(‘a[class=“box2”]’):属性选择器。
– get_text():获取文本内容。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。