zoukankan      html  css  js  c++  java
  • Python接口测试学习笔记(七)

    本文学习笔记整理自【Python开发】接口测试教程

    一. html解析

    1. bs4介绍及安装

    a. 官方介绍:

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

    b. 安装:

    pip install beautifulsoup4

    2. bs4对象的种类

    Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment:

    Tag: Tag对象与XML或HTML原生文档中的tag相同, 如: <h1 class="listtitle">导航</h1>, 这就是一个标签

    NavigableString: 字符串常被包含在tag内.Beautiful Soup用 NavigableString类来包装tag中的字符串, 如: 导航

    BeautifulSoup: 就是整个html对象

    Comment: 注释对象, 如: <!DOCTYPE html>, 它其实就是一个特殊NavigableString

    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get("https://www.cnblogs.com/fayez/")
    
    # html解析是多种解析方式之一, 其他还有lxml 和 html5lib, 详情请查看官网
    soup = BeautifulSoup(r.content, "html.parser")
    
    # Tag 对象(找到第一个符合的tag)
    print(soup.h1)
    print(type(soup.h1))
    # soup.find_all("h1")找到所有的"h1"tag
    print(soup.find_all("h1"))
    
    # NavigableString对象
    print(soup.h1.string)
    print(type(soup.h1.string))
    # BeautifulSoup对象
    print(type(soup))

    3. 获取内容的方法等:

    1. tag属性:

    1. tag.attrs可以返回所有的属性, 返回内容为字典格式

    2. 获取其中的某个一属性, 跟操作字典一样, 如: tag["href"]

    3. 由于class属性一般可以为多个,中间空格隔开, 所有class属性获取的是一个list类型:[u'classes']

    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get("https://cn.bing.com/")
    
    soup = BeautifulSoup(r.content, "html.parser")
    # 获取所有属性
    print(soup.input.attrs)
    # 获取对应属性的值
    print(soup.input["title"])
    # class属性返回list
    print(soup.input["class"])
    # 获取class属性的每个内容
    print(soup.input["class"][0])

    2. get_text()

    1. find_all查找的是一个list对象

    2. get_text()获取tag标签下所有的文本

    3. replace替换字符串里面的特殊字符

    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get("https://www.cnblogs.com/fayez/")
    
    soup = BeautifulSoup(r.content, "html.parser")
    # 查找所有类名为"posttitle"的标签
    articles = soup.find_all(class_="posttitle")
    for i in articles:
        print(i.get_text().replace("
    ", ""))

    3. contents

    1. find只查找一个(返回第一个)

    2. Contents返回所有的子Tag(list)

    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get("https://www.cnblogs.com/fayez/")
    
    soup = BeautifulSoup(r.content, "html.parser")
    articles = soup.find(id="rightcontent")
    print(articles.contents)

    二. 爬取图片到本地(可下漫画~)

    # coding:utf-8
    import requests
    from bs4 import BeautifulSoup
    import os
    
    r = requests.get("http://699pic.com/sousuo-218808-13-1.html")
    soup = BeautifulSoup(r.content,"html.parser")
    # 查找所有 class="lazy" 的元素
    images = soup.find_all(class_="lazy")
    curPath = os.path.dirname(os.path.realpath(__file__))
    for i in images:
        try:
            # 获取元素中对应属性的值
            jpg_url = i["data-original"]
            title = i["title"]
            # 请求各图片地址(比视频中多了个 “http:”)
            im = requests.get("http:"+jpg_url)
            # 写入图片
            with open(title+".jpg","wb") as f:
                f.write(im.content)
        except Exception as msg:
            print("msg")

    三. 概念 & 方法 & 参数

    0. 更具体请查看 bs4 中文官网

    1. 父子节点:如果无法一次性找到一个 Tag, 那就先找他父节点,父节点找不到就找爷爷节点。

    # coding:utf-8
    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get("https://www.cnblogs.com/fayez/p")
    soup = BeautifulSoup(r.content,"html.parser")
    titles = soup.find_all(class_="postTitl2")
    for i in titles:
        # i 是父亲节点,a 是期望获取的节点
        print(i.a.string)

    2. find_all: find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件

    3. limit 参数:limit 参数限制返回结果的数量

    soup.find_all("a", limit=2)
  • 相关阅读:
    安全探讨之用Win32汇编写双进程守护
    LightTPD 1.4.12
    mysql4存在mysql5没有的性能成绩
    gcolor2-拾色器
    solaris 中挂载usb移动硬盘
    Browsershots:测试你的 Web 企图
    MythTV 0.20
    XorgEdit:xorg.conf 编纂器
    pci168c,1c无线网卡如何在64位Solaris系统上运用
    Fedora8中批改磁盘卷标
  • 原文地址:https://www.cnblogs.com/fayez/p/12456738.html
Copyright © 2011-2022 走看看