BeautifulSoup导入
from bs4 import BeautifulSoup
# 将页面注入BeautifulSoup
with open('01.html', 'r', encodeing='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html, 'lxml')
BeautifulSoup获取文本内容
- .string可以返回当前节点中的内容,但是当前节点包含子节点时,.string不知道要获取哪一个节点中的内容,故返回空
- .text(或者.get_text())可以返回当前节点所包含的所有文本内容,包括当前节点的子孙节点
strong_text = item.select('strong')[0].text.strip()
strong_string = item.select('strong')[0].string.strip()
# <strong>nnn</strong>
# 这里二者都可以,因为strong标签下没有子节点
# <strong>nnn<span>niupi</span></strong>
# 这里用text才可获得所有文本内容,string返回为None
BeautifulSoup select 组合查询
组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,需要用空格分开
#可以组合标签,类,ID,
strong_detail = item.select('div[style="margin-left: 2em;"] .mim-font')[0].text.strip()
直接子标签查找
如果不知道子标签查找,可能会觉得BeautifulSoup很难用,例如div,因为若没有指向子标签div的div情况下,它会将子标签div及子标签div下的所有标签div共计一起输出。
# 输出class=“small”下的所有div
items = soup.select('#clinicalSynopsisFold .small > div')
# 输出class="small"下一级的所有div
items = soup.select('#clinicalSynopsisFold .small div')
提取属性值
print(reference.select('.mim-anchor')[0].attrs['id'])
get方法取值
if part.get('class') == ['authors']: # 注意,取class为列表
print(part.text)