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={"属性名": "属性值"}) #也可以通过字典的方式查找








  • 相关阅读:
    智器SmartQ T7实体店试用体验
    BI笔记之SSAS库Process的几种方案
    PowerTip of the Day from powershell.com上周汇总(八)
    PowerTip of the Day2010071420100716 summary
    PowerTip of the Day from powershell.com上周汇总(十)
    PowerTip of the Day from powershell.com上周汇总(六)
    重新整理Cellset转Datatable
    自动加密web.config配置节批处理
    与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable
    在VS2003中以ClassLibrary工程的方式管理Web工程.
  • 原文地址:https://www.cnblogs.com/jasonLiu2018/p/10744030.html
Copyright © 2011-2022 走看看