Beautiful Soup是的一个库,最主要的功能是从网页抓取数据。有了它我们可以很方便地提取出HTML或XML标签中的内容
windows环境下安装
我本地安装的是python2.7,安装时自动安装了pip,在命令行直接输入
pip install beautifulsoup4 即可,推荐安装beautifulsoup4版本,安装好后可以在python环境下输入 from bs4 import BeautifulSoup 测试是否安装成功,没有报错即成功。
创建beautifulsoup对象
- BeautifulSoup 第一个参数应该是要被解析的文档字符串或是文件句柄,第二个参数用来标识怎样解析文档.
soup = BeautifulSoup(html,'lxml') 或者 soup = BeautifulSoup(open('1.html'))
如果第二个参数为空,那么Beautiful Soup根据当前系统安装的库自动选择解析器,解析器的优先顺序: lxml, html5lib, Python标准库.如果指定的解析器没有安装,Beautiful Soup会自动选择其它方案 - Beautiful Soup用了编码自动检测子库来识别当前文档编码并转换成Unicode编码. BeautifulSoup 对象的
.original_encoding 属性记录了自动识别编码的结果:soup.original_encoding - 通过Beautiful Soup输出文档时,不管输入文档是什么编码方式,输出编码均为UTF-8编码
各解析模式解析结果
BeautifulSoup("<a></p>", "html.parser")
# <a></a>
BeautifulSoup("<a></p>", "html5lib")
# <html><head></head><body><a><p></p></a></body></html>
BeautifulSoup("<a></p>", "lxml")
# <html><body><a></a></body></html>
BeautifulSoup("<a><b /></a>", "xml")
# <?xml version="1.0" encoding="utf-8"?>
# <a><b/></a>
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:
- Tag
- NavigableString
- BeautifulSoup
- Comment
Tag:标签,有name和attr属性
只返回首个找到的元素内容
soup.a
soup.p.attrs
soup.p.name
soup.p.get('class')
soup.p['class']
soup.p.string
返回所有匹配的节点内容
soup.p.contents
soup.head.children
soup.descendants
soup.strings
soup.stripped_strings
查找 返回列表类型
soup.find_all(href=re.compile("elsi"),id='link1')
soup.find_all("a",class_="sister",limit = 2, recursive = False)
soup.find_all(attrs={"data-foo":"value"})
soup.find_all(text=re.compile('dormouse'))
css方式查找
soup.select('title') # 按标签名查找
soup.select('p #link1') #p标签里id=link1的对象
soup.select('p a[href=""]') #同一节点中间没有空格如a[href=''] 属性用[]括起来
soup.select('.transaction li')# 不在同一节点中间用空格
soup.select('.content li')