首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

python--爬虫--获取和解析存储网页内容--以薄荷网为例(12)

python--爬虫--获取和解析存储网页内容--以薄荷网为例(12)

BeautifulSoup解析网页内容

前面说了这么多,都是为了获取网页内容html。既然获取到html之后,我们就要进行解析从中提取我们需要的数据。

我们所获取的html本质是字符串。处理字符串最基本的方法是通过相关的字符串函数,但效率很低,容易出错。

还可以使用正则表达式处理字符串。这部分的知识也是很多,大家可以自行了解。

这里,我们推荐的处理方式是使用BeautifulSoup。

BeautifulSoup是解析html/xml的库。非Python自带的库,安装如下:

pip install beautifulsoup4
pip install lxml



安装lxml库是为了加快html解析效率。

基本用法
1、创建BeautifulSoup对象

import bs4
from bs4 import BeautifulSoup



接下来使用beautifulsoup扩展库对html中特定的div进行解析

from bs4 import *  
soup = BeautifulSoup(res.read( ))  
print(soup.find(id="div1")) #得到id=div1的div



2、访问节点

soup = BeautifulSoup(res.read( ))  
print(soup.title)
print(soup.title.name)
print(soup.title.string)
print(soup.title.parent.name)
print(soup.p)
print(soup.p['class'])



3、指定tag、class或id

print(soup.find_all('a'))
print(soup.find('a'))
print(soup.find(class_='title'))
print(soup.find(id="link3"))
print(soup.find('p',class_='title'))



4、从文档中找到所有a标签的链接

for link in soup.find_all('a'):
    print(link.get('href'))


5、指定解析器

出现了警告,根据提示,我们在创建BeautifulSoup对象时,指定解析器即可。

soup = BeautifulSoup(html_doc,'html.parser')


6、从文档中获取所有文字内容

print(soup.get_text())


7、正则匹配

link_node = soup.find('a',href=re.compile(r"til"))
print(link_node)


8、使用lxml解析html

soup = BeautifulSoup(html_doc, 'lxml')



soup是解析得到的解析器。
我们可以根据html的结构获取对应的节点。例如我想获取p标签:

p = soup.body.p



但该方法只能获取到第1个节点。假如body标签下有很多p节点,该方法无法获取全部。
这里,我们可以用find_all或select方法获取。建议大家使用select方法,这个方法可以jQuery选择器用法差不多。例如:

p1 = soup.select('p') #获取p标签
p2 = soup.select('#test_p') #获取id为test_p的标签
p3 = soup.select('.test')   #获取class为test的标签
p4 = soup.select('body .test') #获取body下的class为test的标签
返回列表