zoukankan      html  css  js  c++  java
  • 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#

  • 相关阅读:
    OutputStream之flush() · 李大白写点儿啥
    AQS总结
    深入理解JavaScript中的this关键字
    Cookie
    【翻译】Ext JS 5的平板支持
    【翻译】在Sencha Touch中创建离线/在线代理
    OpenCV——PS 图层混合算法 (三)
    OpenCV——PS 图层混合算法 (二)
    【翻译】在Ext JS和Sencha Touch中创建自定义布局
    OpenCV——PS 图层混合算法(一)
  • 原文地址:https://www.cnblogs.com/chimeiwangliang/p/8649003.html
Copyright © 2011-2022 走看看