Selenium学习003-元素选择之BeautifulSoup
2018-07-27 本文已影响67人
残阳夕露
Selenium学习笔记目录
BeautifulSoup4
-
BS是可以从HTML或XML文件中提取数据的库
-
Selenium可以用来远程获取数据
-
有的时候,感觉用Selenium获取某些元素数据不太方便
-
可以将其父节点的html获取回来,利用BS在本地做分析
-
我们可以将它和selenium两种技术融合使用,达到我们的目的
-
安装BeautifulSoup4
pip install beautifulsoup4 # pip install beautifulsoup4 -i https://pypi.douban.com/simple/ pip install html5lib
-
常见用法(详见示例内的代码及注释)
- 示例及具体方法
# 本例采用的是本地的html with open ('test.html',encoding = 'utf8') as f : html_doc = f.read() # 导入beautifulsoup from bs4 import BeautifulSoup # 指定html5lib来解析html文档 soup = BeautifulSoup(html_doc,'html5lib') print(soup.title) # 获取标签整体内容 print(soup.p)# 有多个时,获取的是第一个 print(soup.title.name) # 获取标签名称 print(soup.title.string) # 获取点前节点标签的内容 print(soup.title.get_text()) # 获取当前节点及子节点的所有内容 print(soup.body.get_text("|")) # 获取当前节点及子节点的所有内容,以|分隔每个节点的内容 print(soup.title.parent)# 获取当前节点及父节点的内容 print(soup.body['style']) # 获取属性值 print(soup.body.get('style')) # 获取属性值 # 有多个标签想获取非第一个 # 方法一;先返回所有的,在根据下标查找 print(soup.find_all('p')) #返回的是一个列表所以可以使用列表获取元素的方法 print(soup.find_all('p')[1]) # 根据下标获取第二个 # 方法二:根据属性找 print(soup.find_all('p',id='b')) # 根据id获取第二个 # 执行结果 <title>测试</title> <p id="a">第一个p</p> title 测试 测试 | 标题1 | | 标题2 | |第一个p| |第二个p| |第三个p| <head> <title>测试</title> </head> background-color: yellow background-color: yellow [<p id="a">第一个p</p>, <p id="b">第二个p</p>, <p id="c">第三个p</p>] <p id="b">第二个p</p> [<p id="b">第二个p</p>]
- 演示文件
# html文件(本地) <html> <head> <title>测试</title> </head> <body style='background-color: yellow'> <h1 > 标题1 </h1> <h2 style = 'background-color:green;text-align:center'> 标题2 </h2> <p id ='a'>第一个p</p> <p id = 'b'>第二个p</p> <p id = 'c'>第三个p</p> </body> </html>