zoukankan      html  css  js  c++  java
  • 【转】requests、BeautifulSoup使用总结

    转自,https://www.cnblogs.com/wupeiqi/articles/6283017.html  ----

    Python标准库中提供了:urllib、urllib2、httplib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。

    Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。

    1、GET请求

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 1、无参数实例
      
    import requests
      
    ret = requests.get('https://github.com/timeline.json')
      
    print ret.url
    print ret.text
      
      
      
    # 2、有参数实例
      
    import requests
      
    payload = {'key1''value1''key2''value2'}
    ret = requests.get("http://httpbin.org/get", params=payload)
      
    print ret.url
    print ret.text

    2、POST请求

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # 1、基本POST实例
      
    import requests
      
    payload = {'key1''value1''key2''value2'}
    ret = requests.post("http://httpbin.org/post", data=payload)
      
    print ret.text
      
      
    # 2、发送请求头和数据实例
      
    import requests
    import json
      
    url = 'https://api.github.com/some/endpoint'
    payload = {'some''data'}
    headers = {'content-type''application/json'}
      
    ret = requests.post(url, data=json.dumps(payload), headers=headers)
      
    print ret.text
    print ret.cookies

    3、其他请求

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    requests.get(url, params=None**kwargs)
    requests.post(url, data=None, json=None**kwargs)
    requests.put(url, data=None**kwargs)
    requests.head(url, **kwargs)
    requests.delete(url, **kwargs)
    requests.patch(url, data=None**kwargs)
    requests.options(url, **kwargs)
      
    # 以上方法均是在此方法的基础上构建
    requests.request(method, url, **kwargs)

    4、更多参数

     参数列表
     参数示例

    官方文档:http://cn.python-requests.org/zh_CN/latest/user/quickstart.html#id4

    BeautifulSoup

    BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XML中查找指定元素变得简单。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    from bs4 import BeautifulSoup
     
    html_doc = """
    <html><head><title>The Dormouse's story</title></head>
    <body>
    asdf
        <div class="title">
            <b>The Dormouse's story总共</b>
            <h1>f</h1>
        </div>
    <div class="story">Once upon a time there were three little sisters; and their names were
        <a  class="sister0" id="link1">Els<span>f</span>ie</a>,
        <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
        <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
    and they lived at the bottom of a well.</div>
    ad<br/>sf
    <p class="story">...</p>
    </body>
    </html>
    """
     
    soup = BeautifulSoup(html_doc, features="lxml")
    # 找到第一个a标签
    tag1 = soup.find(name='a')
    # 找到所有的a标签
    tag2 = soup.find_all(name='a')
    # 找到id=link2的标签
    tag3 = soup.select('#link2')

    安装:

    1
    pip3 install beautifulsoup4

    使用示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from bs4 import BeautifulSoup
     
    html_doc = """
    <html><head><title>The Dormouse's story</title></head>
    <body>
        ...
    </body>
    </html>
    """
     
    soup = BeautifulSoup(html_doc, features="lxml")

    1. name,标签名称

    2. attr,标签属性

    3. children,所有子标签

    1
    2
    # body = soup.find('body')
    # v = body.children

    4. children,所有子子孙孙标签

    5. clear,将标签的所有子标签全部清空(保留标签名)

    6. decompose,递归的删除所有的标签

    7. extract,递归的删除所有的标签,并获取删除的标签

    8. decode,转换为字符串(含当前标签);decode_contents(不含当前标签)

    9. encode,转换为字节(含当前标签);encode_contents(不含当前标签)

    10. find,获取匹配的第一个标签

    11. find_all,获取匹配的所有标签

    12. has_attr,检查标签是否具有该属性

    13. get_text,获取标签内部文本内容

    14. index,检查标签在某标签中的索引位置

    1
    2
    3
    4
    5
    6
    7
    # tag = soup.find('body')
    # v = tag.index(tag.find('div'))
    # print(v)
     
    # tag = soup.find('body')
    # for i,v in enumerate(tag):
    # print(i,v)

    15. is_empty_element,是否是空标签(是否可以是空)或者自闭合标签,

         判断是否是如下标签:'br' , 'hr', 'input', 'img', 'meta','spacer', 'link', 'frame', 'base'

    16. 当前的关联标签

    17. 查找某标签的关联标签

    18. select,select_one, CSS选择器

    19. 标签的内容

    20.append在当前标签内部追加一个标签

    21.insert在当前标签内部指定位置插入一个标签

    22. insert_after,insert_before 在当前标签后面或前面插入

    23. replace_with 在当前标签替换为指定标签

    24. 创建标签之间的关系

    25. wrap,将指定标签把当前标签包裹起来

    26. unwrap,去掉当前标签,将保留其包裹的标签

    1
    2
    3
    # tag = soup.find('a')
    # v = tag.unwrap()
    # print(soup)

    更多参数官方:http://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

    一大波"自动登陆"示例

     抽屉新热榜
     github
     知乎
     博客园
     拉勾网
  • 相关阅读:
    设计模式(一)基础面向对象
    面试题之三门问题
    「巫师3(The Witcher 3:Wild Hunt)」游戏测评
    欧拉角和四元数
    struts标签遍历各种list Map
    浅谈HtmlCleaner+XPath解析html或者xml
    hadoop简单例子
    解决JSP参数传递乱码的问题
    Set、List、Map的区别(浅谈)
    做个犀利的码农
  • 原文地址:https://www.cnblogs.com/yoyo008/p/9285489.html
Copyright © 2011-2022 走看看