python3 BeautifulSoup模块

▼魔方 西西 提交于 2019-12-24 21:01:37

一、安装下载:

1、安装:
pip install beautifulsoup4

2、可选择安装解析器:pip install lxmlpip install html5lib3、解析器比较:
解析器使用方法优势劣势
Python标准库 BeautifulSoup(markup, "html.parser")
  • Python的内置标准库
  • 执行速度适中
  • 文档容错能力强
  • Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器 BeautifulSoup(markup, "lxml")
  • 速度快
  • 文档容错能力强
  • 需要安装C语言库
lxml XML 解析器

BeautifulSoup(markup, ["lxml", "xml"])

BeautifulSoup(markup, "xml")

  • 速度快
  • 唯一支持XML的解析器
  • 需要安装C语言库
html5lib BeautifulSoup(markup, "html5lib")
  • 最好的容错性
  • 以浏览器的方式解析文档
  • 生成HTML5格式的文档
  • 速度慢
  • 不依赖外部扩展
 
   

 二、BS的使用:

from bs4 import BeautifulSoupimport requests,rereq_obj = requests.get('https://www.baidu.com')soup = BeautifulSoup(req_obj.text,'lxml')'''标签查找'''print(soup.title)              #只是查找出第一个print(soup.find('title'))      #效果和上面一样print(soup.find_all('div'))    #查出所有的div标签'''获取标签里的属性'''tag = soup.divprint(tag['class'])   #多属性的话,会返回一个列表print(tag['id'])      #查找标签的id属性print(tag.attrs)      #查找标签所有的属性,返回一个字典(属性名:属性值)'''标签包的字符串'''tag = soup.titleprint(tag.string)                 #获取标签里的字符串tag.string.replace_with("哈哈")    #字符串不能直接编辑,可以替换'''子节点的操作'''tag = soup.headprint(tag.title)     #获取head标签后再获取它包含的子标签'''contents 和 .children'''tag = soup.bodyprint(tag.contents)        #将标签的子节点以列表返回print([child for child in tag.children])      #输出和上面一样'''descendants'''tag = soup.body[print(child_tag) for child_tag in tag.descendants]    #获取所有子节点和子子节点'''strings和.stripped_strings'''tag = soup.body[print(str) for str in tag.strings]             #输出所有所有文本内容[print(str) for str in tag.stripped_strings]    #输出所有所有文本内容,去除空格或空行'''.parent和.parents'''tag = soup.titleprint(tag.parent)                 #输出便签的父标签[print(parent) for parent in tag.parents]  #输出所有的父标签'''.next_siblings 和 .previous_siblings    查出所有的兄弟节点''''''.next_element 和 .previous_element    下一个兄弟节点''''''find_all的keyword 参数'''soup.find_all(id='link2')                   #查找所有包含 id 属性的标签soup.find_all(href=re.compile("elsie"))     #href 参数,Beautiful Soup会搜索每个标签的href属性:soup.find_all(id=True)                       #找出所有的有id属性的标签soup.find_all(href=re.compile("elsie"), id='link1')         #也可以组合查找soup.find_all(attrs={"属性名": "属性值"})  #也可以通过字典的方式查找

 更多详细的用法:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!