[华为云在线课程][Python网络爬虫][数据定位工具][四][学习笔记]
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():获取文本内容。
- 点赞
- 收藏
- 关注作者
评论(0)