BeautifulSoup是一种较为常用的解析库,如果你觉得用正则表达式来解析网页过于繁琐,需要写较长的 正则表达式,那么beautifulsoup将是你的好选择。
首先选择方法主要分为标签选择和css选择器选择,可以根据个人喜好来选择使用,当然我更喜欢css选择。更便捷也更直接。
1.引入方式
from bs4 omport BeautifulSoup
soup=BeautifulSoup(html,'lxml')
其中html为一段html代码,用来作为解析对象,就是将html代码转化为beautifulsoup对象。
而lxml就是解析器,除了lxml,还有xml,html.parser,以及html5.lib。不过我更喜欢用lxml。
2.标签选择
print(soup.prettify()) '''格式化补全后输出'''
print(soup.p.attrs['name']) '''输出p标签的name属性值'''
print(soup.p.string) '''输出第一个p标签的内容’‘’
print(soup.head.title.string) '''嵌套选择'''
print(soup.p.contents) '''输出子节点,输出的是列表,如果用child,输出的是一个迭代器,需要用enumerate方法输出'''
print(soup.p.descendants) '''输出子孙节点'''
print(soup.p.parents) '''输出父节点'''
print(soup.p.parents) '''输出祖先节点'''
print(soup.p.siblings) '''输出兄弟节点,除此以外,兄弟节点还可以用next和previous方法,可以通过 print(list(ennumerate(soup.p.previous)))这样的枚举方法来输出。
find方法
print(soup.find_all('ul')) '''输出所有的Ul标签'''
print(soup.find_all(id='list-1') '''输出所有属性为id='list-1'的标签 注意,若为class属性,需要键入class_ 因为class是关键字 '''
print(soup.p.find_next_sibling())
print(soup.p.find_next_siblings())
print(soup.p.find_all_next()) '''返回节点后所有符合条件的节点'''
print(soup.p.find_next()) '''返回一个符合条件的节点'''
3.css选择器
可以通过直接select()方法直接键入css属性即可完成查找。
print(soup.select(.panel .panel_heading)) '''输出class="panel"的标签下class="panel_heading"的标签,注意写的时候中间有空格'''
print(soup.select('ul li')) '''输出ul下的li标签'''
print(ul.attrs['id']) '''输出ul的id属性值'''
print(li.get_text()) '''输出li的内容'''
BeautifulSoup的基础知识就是这些,如果想进一步的深入学习,可以查看beautifulsoup的官方网站,和查看css手册来进一步学习。