Beautiful Soup库介绍
开始前需安装Beautiful Soup 和lxml。
Beautiful Soup在解析时依赖解析器,下表列出bs4支持的解析器。
解析器 | 使用方法 |
Python标准库 | BeautifulSoup(markup,"html.parser") |
lxml HTML解析器 | BeautifulSoup(markup,"lxml") |
lxml XML解析器 | BeautifulSoup(markup,"xml") |
html5lib | BeautifulSoup(markup,"html5lib") |
from bs4 import BeautifulSoup import requests url = 'http://bangumi.tv/anime/browser?sort=rank&page=1' headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content.decode('utf-8'),'lxml')
使用lxml初始化Beautiful Soup
print(soup.title) #输出title节点 print(soup.title.string) #输出title节点的文本内容 print(soup.p) #当有多个p节点时,只选择到第一个p节点 print(soup.title.name) #title节点的name属性 print(soup.p.attrs) #选择p节点的所有属性以字典输出 print(soup.p.attrs['name']) #选择p节点的name属性 print(soup.p['name']) #上面的简单写法 print(soup.head.title.string) #支持嵌套选择 print(soup.p.contents) #选择p节点的直接子节点,包括节点与文本,以列表形式返回 print(soup.p.children) #选择p节点的直接子节点,包括节点与文本,以生成器类型返回 print(soup.p.descendants) #选择p节点的所有子孙节点,包括节点与文本,以生成器类型返回 print(soup.p.parent) #选择p节点的直接父节点 print(soup.p.parents) #选择p节点的所有父节点 print(soup.a.next_sibling) print(soup.a.previous_sibling) print(list(enumerate(soup.a.next_siblings))) print(list(enumerate(soup.a.previous_siblings))) #选择p节点的下一个兄弟元素、上一个兄弟元素、后面所有的兄弟元素、前面所有兄弟元素
find_all(name,attrs,recursive,text,**kwargs)
查询所有符合条件的元素
ul = soup.find_all(name='ul')) #获取所有ul节点 print(ul.find_all(name='li')) #获取ul节点的所有li节点 print(soup.find_all(attrs={'id':'list-1'})) #利用属性值查询 print(soup.find_all(id='list-1')) #上一句的简写 print(soup.find_all(text=re.compile('link'))) #text参数用来匹配节点的文本,可传入字符串或正则表达式 print(soup.find(id='list-1')) #find()方法只返回第一个匹配到的元素 print(soup.select('.panel .panel-heading')) print(soup.select('ul li')) #使用CSS选择器时,需调用select()方法,传入相应的CSS选择器