前言
记录使用BeautifulSoup查找元素的常用方法。安装
pip install beautifulsoup4
解析页面
from bs4 import BeautifulSoup
soup=BeautifulSoup(r.text,"html.parse")
#print(soup.prettify()) #格式化输出
标签属性
soup.<tag> #标签
soup.<tag>.name #标签名
soup.<tag>.attrs #标签属性,字典形式
soup.<tag>.string #标签字符串
遍历标签树
#下行遍历
soup.<tag>.contents #子节点列表,可以索引
soup.<tag>.children #用于遍历子节点,不可索引
soup.<tag>.descendant #用于遍历子孙节点
#上行遍历
soup.<tag>.parent #父亲节点
soup.<tag>.parents #用于遍历祖宗节点
#平行遍历
soup.<tag>.next_sibling #下一平行标签
soup.<tag>.previous_sibling #上一平行标签
soup.<tag>.next_siblings #用于遍历后续平行标签
soup.<tag>.previous_siblings #用于遍历之前平行标签
#过滤非标签
import bs4
if isinstance(<tag>,bs4.element.Tag):
...
查找标签
soup.find_all(<标签名>,<属性字典>,<是否对孙节点搜索,默认为True>,string=<字符串>)
soup.<tag>.find_all(<标签名>,<属性字典>,<是否对孙节点搜索,默认为True>,string=<字符串>)
#可简写为soup(...),soup.<tag>(...)
soup.<tag>.find_parents(...)
soup.<tag>.find_parent(...)
#均返回列表
......
使用
解析页面
import requests
from bs4 import BeautifulSoup
r=requests.get("http://127.0.0.1:5000/static/Web笔记.htm")
soup=BeautifulSoup(r.text,"html.parser")
html页面
查找标签
span=soup.span #第一个span标签
span
>>><span lang="EN-US" style="font-size:14.0pt">Python</span>
span.attrs["lang"] #span的"lang"属性
>>>'EN-US'
for tag in soup.span.parents:
print(tag.name,end=" ") #遍历祖宗节点
>>>b p div body html [document]
soup("span",{'style': 'font-size:14.0pt'}) #按属性查找
>>>[<span lang="EN-US" style="font-size:14.0pt">Python</span>]
soup.div("span",string='Python') #按字符串查找
>>>[<span lang="EN-US" style="font-size:14.0pt">Python</span>,
<span lang="EN-US">Python</span>, <span lang="EN-US">Python</span>]
span.find_parents('p',{'align': 'center'})
>>>[<p align="center" class="MsoNormal" style="text-align:center"><b><span lang="EN-US" style="font-size:14.0pt">Python</span></b><b><span style="font-size:14.0pt;font-family:宋体">语言程序设计</span></b></p>]