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'
    
  • 相关阅读:
    1、一条sql查询语句的执行过程
    go 内存分配
    GO Json
    gorm CRUD:读写数据
    go 基于切片的队列实现
    go的错误处理
    grpc
    sqlalchemy 判断字段是否存在
    定时函数
    用Python获取Linux资源信息的三种方法
  • 原文地址:https://www.cnblogs.com/Nayears/p/12166804.html
Copyright © 2011-2022 走看看