zoukankan      html  css  js  c++  java
  • beautifulsoup4

    beautifulsoup4

    官方文档

    https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/。

    参数

    import requests  #导入requests模块
    response = requests.get("https://www.autohome.com.cn/all/1/#liststart") #get发送请求
    all_soup = BeautifulSoup(response.text, "html.parser")    #html.parser解析器
    ul_obj = all_soup.find(name="ul", attrs={"class": 'article'})  #找到ul标签
    
    response.encoding = 'gbk'  #指定编码格式
    print(response.encodint)   #获取网页编码格式
    print(response.status_code)   #200   #打印响应状态码
    print(response.request)   #<PreparedRequest [GET]>  #获取请求方式
    print(response.url)   #打印网络路由地址
    print(response.text)   #获取html页面文本内容的数据
    print(request.session())  #获取携带的session数据
    print(request.cookies)    #requests_cookies <module 'requests.cookies' from 		'E:\Python\Python368\lib\site-packages\requests\cookies.py'>
    
    print(response.cookies)    #<RequestsCookieJar[]>获取携带的cookies值
    print(response.content)  #获取二进制类数据类型   如imp4  imp3  jpg  img等
    

    搜索

    BeautifulSoup 主要用来遍历子节点及子节点的属性,并提供了很多方法,比如获取 子节点、父节点、兄弟节点等,但通过实践来看,这些方法用到的并不多。我们主要用到的是从文档树中搜索出我们的目标。

    ​ 通过点取属性的方式只能获得当前文档中的第一个 tag,例如,soup.li。如果想要得到所有的<li> 标签,就需要用到 find_all()find_all() 方法搜索当前 tag 的所有 tag 子节点,并判断是否符合过滤器的条件 find_all() 所接受的参数如下:

    find_all( name , attrs , recursive , text , **kwargs )
    

    按name搜索

    ​ 可以查找所有名字为 name 的 tag,字符串对象会被自动忽略掉。

    >>> soup.find_all('b')
    [<b>The Dormouse's story</b>]
    >>> soup.find_all('a')
    [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
    

    按 id 搜索

    ​ 如果文档树中包含一个名字为 id 的参数,其实在搜索时会把该参数当作指定名字 tag 的属性来搜索:

    >>> soup.find_all(id='link1')
    [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
    

    按 attr 搜索

    ​ 有些 tag 属性在搜索不能使用,比如 HTML5 中的 data-* 属性,但是可以通过 find_all() 方法的 attrs 参数定义一个字典参数来搜索包含特殊属性的 tag。其实 id 也是一个 attr:

    >>> soup.find_all(attrs={'id':'link1'})
    [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
    

    按 CSS 搜索

    ​ 按照 CSS 类名搜索 tag 的功能非常实用,但标识 CSS 类名的关键字 class 在 Python 中是保留字,使用 class 做参数会导致语法错误。因此从 Beautiful Soup 的 4.1.1 版本开始,可以通过 class_ 参数搜索有指定 CSS 类名的 tag:

    >>> soup.find_all(class_='sister')
    [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
    

    string 参数

    ​ 通过 string 参数可以搜搜文档中的字符串内容。与 name 参数的可选值一样,string 参数接受字符串、正则表达式、列表、True。

    >>> soup.find_all('a', string='Elsie')
    [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
    

    recursive 参数

    ​ 调用 tag 的 find_all() 方法时,Beautiful Soup 会检索当前 tag 的所有子孙节点,如果只想搜索 tag 的直接子节点,可以使用参数 recursive=False。

    find() 方法

    ​ 它与 find_all() 方法唯一的区别是 find_all() 方法的返回结果是值包含一个元素的列表,而 find() 方法只返回第一个匹配的结果

    get_text() 方法

    ​ 如果只想得到 tag 中包含的文本内容,那么可以用 get_text() 方法,这个方法获取到 tag 中包含的所有文本内容。

    >>> soup.find_all('a', string='Elsie')[0].get_text()
    'Elsie'
    >>> soup.find_all('a', string='Elsie')[0].string
    'Elsie'
    
  • 相关阅读:
    spark 读取mongodb失败,报executor time out 和GC overhead limit exceeded 异常
    在zepplin 使用spark sql 查询mongodb的数据
    Unable to query from Mongodb from Zeppelin using spark
    spark 与zepplin 版本兼容
    kafka 新旧消费者的区别
    kafka 新生产者发送消息流程
    spark ui acl 不生效的问题分析
    python中if __name__ == '__main__': 的解析
    深入C++的new
    NSSplitView
  • 原文地址:https://www.cnblogs.com/Nayears/p/12166804.html
Copyright © 2011-2022 走看看