[华为云在线课程][Python网络爬虫][数据定位工具][四][学习笔记]

举报
John2021 发表于 2022/06/16 22:51:31 2022/06/16
【摘要】 [华为云在线课程][Python网络爬虫][数据定位工具][四][学习笔记] 1.数据定位 1.1.数据提取使用爬虫程序向目标主机发送请求后获取的响应大多是json和HTML格式的数据。json数据可以通过json和jsonpath模块进行操作。HTML代码需要进行数据定位。 1.2.爬虫中的数据定位在静态网页中,数据已经存在网页中,而爬虫在获得响应以后会拿到带有数据的字符串(网页的HTM...

1.数据定位

1.1.数据提取

使用爬虫程序向目标主机发送请求后获取的响应大多是json和HTML格式的数据。

  • json数据可以通过json和jsonpath模块进行操作。
  • HTML代码需要进行数据定位。

1.2.爬虫中的数据定位

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

2.Xpath

2.1.Xpath简介

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

2.2.Xpath使用

获取HTML文本

  • lxml.etree.HTML:HTML文本修正,自动补全html文本,创造一个Xpath解析对象。
  • HTML.tostring:输出修正后的html文本(结果是bytes类型)

构造路径表达式
HTML.xpath()
html=requests.get(url):

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

2.3.Xpath语法

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

2.4.Xpath数据提取

路径表达式 结果
//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元素,从第二个开始选择。
//p/title[text()=Python’] 选择所有p下的title元素,仅仅选择文本为Python的title元素。
/div/book[price>35.00]/title 选取div元素中的book元素的所有title元素,且其中的price元素的值须大于35.00。
/div/* 选取div元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的title元素。

3.BS4

3.1.BeautifulSoup4简介

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

3.2.BeautifulSoup4中的对象

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

3.3.BeautifulSoup4基本使用

创建BeautifulSoup对象:

  • soup = BeautifulSoup(html) # 加载获取的网页源码。
  • soup = BeautifulSoup(open(‘index.html’)) # 获取本地文件中html。

搜索文档树:

  • soup.find(tag):查找tag,返回第一个符合条件的tag。
  • soup.find_all(tag):查找所有tag,并返回一个列表。
  • Tag可以是一个字符串、一个列表、一个正则表达式或者是html标签中的一个属性。

3.4.BeautifulSoup对象的常用属性和方法

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

3.5.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个月内不可修改。