• python3 BeautifulSoup模块


    一、安装下载:

    1、安装:
    pip install beautifulsoup4
    
    2、可选择安装解析器:
    pip install lxml
    pip install html5lib

    3、解析器比较:
    解析器使用方法优势劣势
    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 BeautifulSoup
    import requests,re
    req_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.div
    print(tag['class']) #多属性的话,会返回一个列表
    print(tag['id']) #查找标签的id属性
    print(tag.attrs) #查找标签所有的属性,返回一个字典(属性名:属性值)

    '''标签包的字符串'''
    tag = soup.title
    print(tag.string) #获取标签里的字符串
    tag.string.replace_with("哈哈") #字符串不能直接编辑,可以替换

    '''子节点的操作'''
    tag = soup.head
    print(tag.title) #获取head标签后再获取它包含的子标签

    '''contents 和 .children'''
    tag = soup.body
    print(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.title
    print(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#

  • 相关阅读:
    记录下centos下 ffmpeg项目编译参数
    windows编译ffmpeg出错记录
    实际业务说明token的作用,保证安全性
    cookie设置domain报异常:java.lang.IllegalArgumentException,解决tomcat因版本问题导致的domain设置异常
    Hosts文件解析
    RedisPool类使用Jedis操作Redis
    Maven开发环境设置导致的异常java.lang.NumberFormatException: null
    在Java中关于值传递和引用传递小记
    redis报错"Error trying to save the DB, can't exit." Redis修改配置文件改变数据存放的位置
    “以独占方式锁定此配置文件失败”及“无法获得 VMCI 驱动程序的版本”
  • 原文地址:https://www.cnblogs.com/chimeiwangliang/p/8649003.html
Copyright © 2020-2023  润新知