Python---HTTP 请求实战练习

作者: 倔强的潇洒小姐 | 来源:发表于2017-08-25 07:51 被阅读111次

    如果要进行客户端和服务器端之间的消息传递,我们可以使用HTTP协议请求

    HTTP 协议请求主要分6种类型 (GET 和 POST 较常用)

    1)GET 请求

    通过URL网址传递信息,可以直接在URL中写上要传递的信息,也可以由表单进行传递(表单中的信息会自动转化为URL地址中的数据,通过URL地址传递)

    备注:已经取得资源,并将资源添加到响应中的消息体

    2)POST 请求

    可以向服务器提交数据,是一种比较安全的数据传递方式,比如在登录时,经常使用 POST 请求发送数据

    3)PUT 请求

    请求服务器存储一个资源,通常需要制定存储的位置

    4)DELETE 请求

    请求服务器删除一个资源

    5)HEAD 请求

    请求获取对应的 HTTP 报头信息

    6)OPTIONS 请求

    可以获得当前URL所支持的请求类型

    Response Code

    状态码:200 OK
    表明请求已经成功. 默认情况下成功的请求将会被缓存

    不同请求方式对于请求成功的意义如下:
    GET:已经取得资源,并将资源添加到响应中的消息体.
    HEAD:作为消息体的头部信息
    POST:在消息体中描述此次请求的结果

    请求成功对于PUT 和 DELETE 来说并不是200 ok 而是 204 所代表的没有资源 (或者 201 所代表的当一个资源首次被创建成功

    以下是常见状态码及含义

    状态码 英文 中文含义
    200 OK 一切正常
    301 Moved Permanently 重定向到新的URL,永久性
    302 Found 重定向到临时URL,非永久性
    304 Not Modified 请求的资源未更新
    400 Bad Request 非法请求
    401 Unauthorized 请求未经授权
    403 Forbidden 禁止访问
    404 Not Found 没有找到对应资源
    500 Internal Server Error 服务器内部出现错误
    501 Not Implemented 服务器不支持实现请求所需要的功能

    1、GET 请求实例分析

    比如我们打开百度,搜索 python 关键词,按回车键(Enter),此时会出现对应的查询结果

    百度搜索python 网址的变化过程.png

    对比网址,发现对应的查询信息是通过URL来传递的,但光看网址我们也不知道采用的是什么方法,那么我们打开浏览器自带的开发者工具(F12)或者用 Fiddler 抓包 来查看请求

    浏览器F12看请求信息.png Fiddler 抓包.png

    分析网址,字段 wd 存储的就是用户带检索的关键词,由此推简化下网址https://www.baidu.com/s?wd=python,复制到浏览器,刷新(F5)

    简化网址重新搜索.png

    得到这个规律(通过 GET 请求,用爬虫实现在百度上自动查询某个关键词),用 python 实现如下:

    import urllib.request
    
    keywd = "python"   # 给变量赋值搜索关键词
    url = "https://www.baidu.com/s?wd=" + keywd
    req =urllib.request.Request(url)
    data = urllib.request.urlopen(req).read()  # 将爬取的网页内容赋值给变量 file
    fhandle = open("F:/Python Exercise/Part 4/3.html","wb")   # 目录提前建好,“wb” 二进制写入
    fhandle.write(data)   # 写入数据
    fhandle.close()
    print(fhandle)
    
    # 运行结果
    <_io.BufferedWriter name='F:/Python Exercise/Part 4/3.html'>
    
    Process finished with exit code 0
    

    当我们搜索中文关键词时,执行上述代码提示编码问题,需要优化下(对搜索关键字 quote)
    (UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-13: ordinal not in range(128)

    搜索中文关键词时,执行提示编码问题.png

    优化后代码如下:

     key = '网易音乐'
     keywd = urllib.request.quote(key)
    
    【GET 请求使用总结】

    1)构建对应的URL地址(包含 GET 请求的字段名和字段内容等信息),格式为 地址 + 参数,即 http(s)://网址?字段名1=字段内容1 & 字段名2=字段内容2
    2)将对应的 URL 作为参数,构建 Request 对象
    3)通过 urlopen() 打开构建的 Request 对象
    4)后续处理操作,如读取网页内容,将内容写入文件等

    2、POST 请求实例分析

    比如我们在进行注册、登录等操作时,基本上都会遇到 POST 请求,因登录需要用到 Cookie 知识,此处将以表单为例(http://www.w3school.com.cn/tiy/t.asp?f=html_form_submit

    使用爬虫自动提交POST请求.png
    【思路】

    1)设置好 URL 网址
    2)构建表单数据,并使用 urllib.request.urlencode 对数据进行编码处理
    3)创建 Request 对象,参数包括 URL 地址和要传递的数据
    4)使用 add_header() 添加头信息,模拟浏览器进行爬取
    5)使用 urllib.request.urlopen() 打开对应的 Request 对象,完成信息的传递
    6)后续处理,如读取网页内容,将内容写入文件等

    相关文章

      网友评论

      本文标题:Python---HTTP 请求实战练习

      本文链接:https://www.haomeiwen.com/subject/kjsydxtx.html