selenium04-Beautifulsoup用法
2019-06-17 本文已影响0人
筱媛媛
BS是可以从HTML或XML文件中提取数据的第三方库。有的时候是否感觉用selenium获取某些元素数据不太方便,而Selenium 可以用来远程获取数据,这时可以将其父节点的html获取回来,利用BS在本地做分析。本篇主要讲的是Beautifulsoup的基本用法。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!
01:Beautifulsoup4简介
1)Beautifulsoup简称BS,是可以从HTML或XML中提取数据的第三方库
2)Beautifulsoup用途:解析HTML文本,操作对象是字符串,与浏览器无关
3)注意:beatufulsoup不能驱动网页,只能获取信息
4)文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
02:Beautifulsoup安装
pip install beautifulsoup4
pip install html5lib
03:Beautifulsoup实例简单讲解
现在我们根据一个例子来讲解如何使用bs,本地有一个html文档,注意他只是本地的一个磁盘文件和Selenium没有关系。html片段如下:
<!DOCTYPE html>
<html lang="一家人">
<head>
<meta charset="UTF-8">
<title>三个孩子的故事1</title>
<title>三个孩子的故事2</title>
</head>
<body>
<p class="title" style="color:red"><b>三胞胎的故事</b></p>
<p class="story">从前有一个三胞胎家庭,他们的名字是
<a href="http://example.com/elsie" class="sister" id="link1">大宝</a>,
<a href="http://example.com/lacie" class="sister" id="link2">小二</a> 和
<a href="http://example.com/tillie" class="sister" id="link3">三丫</a>;
他们都住在一个漂亮的房子里.</p>
<p class="story">...</p>
<div id="d1">
<a href="http://baidu.com/tillie" class="sister" >百度</a>
</div>
</body>
</html>
1)使用BeautifulSoup库处理HTML字符串
#从bs4这个库导入BeautifulSoup对象
from bs4 import BeautifulSoup
with open(r'C:\Users\qin\Desktop\autoUI_selenium\lesson02\bs1.html',encoding='utf8') as f:
html=f.read()
# 指定用html5lib来解析html文档
soup = BeautifulSoup(html, "html5lib")
2)获取一个标签名的元素信息:soup.find('title')或者soup.title
#获取一个标签名为title的元素
title=soup.find('title')#匹配第一个元素
#a=soup.tittle#方法2:根据标签名称获取元素信息
print(title)
#输出结果如下:
<title>三个孩子的故事1</title>
3)获取所有标签名的元素信息:soup.find_all('title')
#获取所有titlle元素信息
title=soup.find_all('title')
print(title)
4)获取标签名的文本内容
①soup.title.string:获取该元素本身包含的文本内容
②soup.get_text():获取该元素下所有子元素(如果有)的文本内容,包含自身的文本内容
title=soup.find('title')#默认获取第一个title内容
print(title.string)#方法1:.string
print(title.get_text())#方法2:get_text()
#输出结果如下:
三个孩子的故事1
5)多元查找法:结合元素属性来查找元素
a=soup.find('a',id='link2')#根据id属性查找a元素
print(a)
print(soup.find('a',id='link2',herf='http://exaple.com/lacie'))
6)获取元素的父节点:parent
#获取a元素父亲节点
print(soup.a.parent)
#获取a元素父节点标签名
print(soup.a.parent.name)
7)获取某元素的属性值
#获取p的style属性值
print(soup.p['style'])#方法1
print(soup.p.get('style'))#方法2