• BeautifulSoup解析html


    '''
        解析器:
            Python  内置标准库  优势:执行速度适中,文档容错能力强
                BeautifulSoup(html,'html.parser')  3.7 or 3.2 容错能力较差
            lxml HTML   速度快,文档容错能力强  (最常用)
                BeautifulSoup(html,'lxml')
            lxml XML    速度快 ,唯一支持xml解析
                BeautifulSoup(html,'xml')
            html5lib    最好的容错性,速度慢,不依赖外部扩展
                BeautifulSoup(html,'html5lib')
    '''
    import requests
    from bs4 import BeautifulSoup
    
    response = requests.get('https://book.douban.com/')
    soup = BeautifulSoup(response.text, 'lxml')
    # 格式化(自动补全没有闭合标签)
    pret = soup.prettify()
    # print(pret)
    # 获取标签内容
    print(soup.title.string.strip())  # soup.title.string  获取title标签的字符串
    # 获取标签
    print(soup.p)  # (多个p标签)输出第一个p标签
    # 获取标签名称
    print(soup.title.name)
    # 获取属性2种方法
    print(soup.p.attrs['name'])
    print(soup.p['name'])
    # 嵌套元素选择
    print(soup.head.title.string)  # 获取head > title 的内容
    # 获取子节点标签 2中方法
    print(soup.p.contents)  # 返回list类型['<a>aaa</a>',....] 每个标签是一个元素
    print(soup.p.children)  # 返回list_itrator 类型
    # 获取子节点和孙节点
    print(soup.p.descendants)  # 返回迭代器
    # 获取父节点
    print(soup.p.parent)
    # 获取祖先节点
    print(soup.p.parents)
    # 获取兄弟节点
    print(soup.p.next_siblings)  # 下一个
    print(soup.p.previous_siblings)  # 上一个
    
    # 标准选择器
    # find_all(name,attr,recursive,text,**kwargs)
    # name (标签名称)
    print(soup.find_all('ul'))  # 所有的
    print(soup.find_all('ul')[0])  # 取第一个
    for ul in soup.find_all('ul'):
        print(ul.find_all('li')[0])  # 返回tag类型
    # attrs {'id': 'id1'}  {'name': 'aaa'}
    print(soup.find_all(attrs={'name': 'elem'})[0].string)  # 获取标签内容
    
    # CSS 选择器 (select)
    print(soup.select('.ccc .box')[0].string)  # 就是这么爽
    # 获取属性
    print(soup.select('.ccc .box')[0]['id'])
    print(soup.select('.ccc .box')[0].attrs['id'])
    # 获取内容
    print(soup.select('.ccc .box')[0].get_text())
    '''
        总结:
            推荐使用lxml解析库,必要时使用html.parser
            标签选择功能弱但是速度快
            建议使用find(),find_all() 查询单个,或者多个
            如果css选择器熟悉就用select()
            记住常用的属性和文本值获取方法
    '''
    

      

  • 相关阅读:
    Python- 索引 B+数 比如书的目录
    Python-视图 触发器 事务 存储过程
    Python-mysql 权限 pymysql 注入共计
    Shell之Sed常用用法
    python 字符编码讲解
    python enumerate枚举用法总结
    Python第三周 数据类型:集合set、文件的读写、追加操作。
    第二周Python笔记 数据类型 列表 字典
    Python第二周 str的方法
    第二周Python笔记之 变量的三元运算
  • 原文地址:https://www.cnblogs.com/412013cl/p/8709499.html
Copyright © 2020-2023  润新知