数据解析

数据解析对爬虫程序就如同是导盲犬对盲人一样,数据解析是爬虫程序的灵魂所在,所以我们今天来学习数据解析。

首先最常用的三种数据解析方式有(beautifulSoup4库解析、xpath解析、正则表达式解析)三种。

我们今天先来说说beautifulSoup4库解析。

BeautifulSoup4库

利用BeautifulSoup4库解析的大致思路是:
1.首先实例化一个BeautifulSoup对象
2.利用实例化出来的BeautifulSoup对象的属性和方法进行数据解析。
3.数据的持久化存储。

实例化BeautifulSoup对象
1.首先需要我们引入bs4库和lxml库(这两个库大家可以在pycharm里自行下载)。 (为了叙述方便,以下哦我们将BeautifulSoup4库简称为bs4库) 2.使用bs4中的BeautifulSoup(markup,'lxml')方法传入参数。

①其中如果你已经把页面源码爬取了下来并保存到了本地,你就可以把这个文件打开,然后把文件路径对象进来这样就可以构造一个bs4对象了。其中第二个参数是默认的用于解析页面的解析器,我们在前面已经引入了lxml库了,所以我们直接把lxml的名字传进来就ok了,代码如下

#1.将本地文件加载到BeautifulSoup对象中
fp=open('./demo01.html','r',encoding='utf-8')
soup=BeautifulSoup(fp,'lxml')
print(soup)

②如果我们还没有将页面数据爬取到本地,那么我们就可以采用第二种方式获取bs4对象,直接给当前页面发送请求,获取响应,把相应内容作为参数传入到BeautifulSoup()方法中,代码如下:

url='http://www.duyihua.cn/sdmz/xiyou/01/index.htm'
page_text=requests.get(url=url,headers=headers).content
#将页面响应内容当作参数
soup=BeautifulSoup(page_text,'lxml')

通过这两种方式我们就构造出了一个bs对象了,接下来就可以利用这个对象自带的方法和属性进行数据解析了。

常用的属性和方法

1.soup.tagName(tagName代表标签的名称,这个属性可用于返回页面中的标签,但是如果有多个同名标签时将只返回第一个标签。)

如下代码,我就通过soup对象获取了代码中出现的第一个div标签:

import lxml
import  bs4
from bs4 import BeautifulSoup
fp=open('./静态页面01.html','r',encoding='utf-8')
soup=BeautifulSoup(fp,'lxml')
print(soup.div)

运行结果:
在这里插入图片描述

在这里插入图片描述

2.soup.find()方法:
参数可以传入想要获取的标签名称,这样的话它的作用就和soup.tagName一样。
参数也可以传入标签名称和标签特有的属性。返回值类型是一个列表
例如:我想获取class值为nav-search的div标签的话就可以采用如下代码:

import lxml
import  bs4
from bs4 import BeautifulSoup
fp=open('./静态页面01.html','r',encoding='utf-8')
soup=BeautifulSoup(fp,'lxml')
result=soup.find('div',class_='nav-search')
print(result)

运行结果是:
在这里插入图片描述
可见find方法返回了符合条件的标签以及其下的子标签。
在这里插入图片描述
3.soup.find_all(tagName,(属性_=‘属性值’)):
返回所有tagName标签,如果后面跟有属性的话则返回所有属性值为’属性值’的标签。返回值类型是一个列表

import lxml
import  bs4
from bs4 import BeautifulSoup
fp=open('./静态页面01.html','r',encoding='utf-8')
soup=BeautifulSoup(fp,'lxml')
result=soup.find_all('li',class_='dropdown')
print(result)

运行结果:
在这里插入图片描述
4.soup.select(‘某种选择器’):返回一个复合选择器要求的列表
支持css查找,可以传入标签名称,可以传入类选择器

#传入标签名称
result=soup.select('p')
#传入类选择器
result=soup.select('.sister')
#可以传入多个选择器
result=soup.select('.sister.test')

这是后面两个类选择器的运行结果
在这里插入图片描述
5。获取标签中的属性值
soup.tagName[‘属性名’]

#获取a标签下的href属性的属性值
result3=soup.a['href']
print(result3)

这是运行结果
在这里插入图片描述
6.获取标签下的文本内容
tagName.text/get_text()/string
其中text和get_text()获取tagName中所有的文本内容。
string只获取这个标签的直系内容

result4=soup.p.string
result5=soup.p.text
print(result4+'\n')
print(result5)

运行结果如图:
在这里插入图片描述
总的来说bs4这个库现在用的不是很多了,我现在写爬虫的话几乎都没怎么用过这个库了,用到xpath和正则解析多一点,我们下次就可以开始介绍正则解析了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值