zoukankan      html  css  js  c++  java
  • bs4解析

    介绍:将一个html文档转换成BeautifulSoup对象,然后通过对象的方法或属性查找指定的节点内容

    • 转换本地文件:

    ​ soup = BeautifulSoup(fp,'lxml') fp为文档对象

    • 转换网络文件:

      soup = BeautifulSoup('str/bytes','lxml') 'str/bytes'通常为requests请求方法实例化对象的text或content属性

    获取指定内容的方式

    1.通过标签(soup.tagName)

    1.1 根据标签查找

    soup.tagName 查找到第一个符合要求的标签

    例如:soup.a 查找到第一个a标签

    1.2 获取属性

    soup.tagName.attrs 获取标签的所有属性和属性值,返回一个字典

    例如:soup.a.attrs 获取到第一个a标签 所有属性和属性值的一格字典

    soup.tagName.attrs['key'] 获取上述字典的一个属性值,

    通常使用soup.tagName[attr] 简化上面两个方法,例如:soup.a['href'],获取第一个a标签的href属性

    1.3 获取内容

    soup.a.string 获取a标签的文本内容,如果里面嵌套标签,则为None

    ``soup.a.text` 获取a下的所有文本(嵌套标签的文本)

    ``soup.a.get_text()`

    2.find与find_all方法

    2.1find(‘tagName',attr)

    查找到第一个符合attr的‘tagName'标签

    soup.find('a') 和soup.a相同, 查找到第一个a标签

    soup.find('a', title = 'xxx') 查找第一个title为xxx的标签

    soup.find('a',class_ = 'xxx') 注意使用类名时,避免关键字class,这里为class_

    soup.find('a',id = 'xxx')

    find之后还可以使用string、text和get_text() 例如:soup.find('a',class = 'xxx').string

    同样也可以获取属性,例如:soup.find('a',id = 'xxx')['href']

    2.2find_all

    返回的是列表

    soup.find_all('a') 返回一个含所有a标签的列表,要进一步获取某一个a的属性或内容,先从列表中获 取该元素

    soup.find_all(['a','li']) 返回一个含所有a标签和li标签的列表

    soup.find_all('a',limit = 3) 限定前三个a标签 (和python索引不同)

    soup.find_all('div',class_="xxx") 返回所有类名为"xxx"的div标签

    3.select()方法

    select() 括号中和前端中的选择器(标签、类、id....)类似,select返回的也是列表

    select('#id') select('.class') select('ul li')

    select('div > span > a')

    bs4解析练习

    import requests 
    from bs4 import BeautifulSoup
    url = 'https://www.coolapk.com/'
    response = requests.get(url = url)
    ht = response.text
    soup = BeautifulSoup(ht,'lxml')
    soup.a  
    

    <a href="/">
    <span id="header-logo" style="display: flex;justify-content: left;align-items: center;"><img alt="" src="/static/images/header-logo.png" style="height: 35px;margin-right: 10px;"/><span>酷安</span></span>
    </a>
    

    soup.a.attrs   #{'href': '/'}
    
    soup.a['herf']  # /
    
    soup.a.string   #None
    
    soup.a.text    #酷安
    souo.a.get_text()   #酷安
    

    soup.find('li',id="navbar-apk")       #<li id="navbar-apk"><a href="/apk/">应用</a></li>
    soup.find('li',id="navbar-apk").string       #应用
    soup.find('img',class_='logo')['src']           #/static/images/coolapklogo.png
    
    soup.find_all('div',class_="weui-flex",limit = 2)
    

    #结果
    [<div class="weui-flex logo-box">
    <div class="weui-flex__item">
    <img alt="酷安" class="logo" src="/static/images/coolapklogo.png"/>
    </div>
    </div>, <div class="weui-flex">
    <div class="weui-flex__item">
    <p class="title">全新酷安V9</p>
    <p class="sub-title mobile-display">和你一起,发现科技新生活</p>
    <p class="sub-title pc-display">和你一起,<br/>发现科技新生活</p>
    </div>
    </div>]
    

    div_L = soup.find_all('li',limit = 6)
    for i in div_L:
        print(i.text)
    #结果
    首页
    应用
    游戏
    酷安手机APP
    联系酷安
    关于酷安
    

    soup.select('.footer-navbar ul li a')
    for i in tag_a_L:
        print(i['href'])
    #结果:
    /about/about.html
    /about/contact.html
    /about/jobs.html
    /about/copyright.html
    /apk/com.coolapk.market?from=footer
    https://developer.coolapk.com?from=footer
    
  • 相关阅读:
    艾伟:Memcached深度分析 狼人:
    项目一 三角形类4
    Flex 的DataGrid列 的字体,根据不同情况 渲染不同颜色
    yum 失败(This system is not registered with RHN.)解决
    FirePHP调试指南
    项目总结:复杂树状菜单结点增改删(ZTree)
    ./configure: error: the HTTP rewrite module requires the PCRE library.
    使用GDB调试Android NDK native(C/C++)程序
    三角形类1
    我为什么不喜欢网赚和SEO
  • 原文地址:https://www.cnblogs.com/notfind/p/11465201.html
Copyright © 2011-2022 走看看