美文网首页
python爬虫学习手册-服务器渲染(基础库httplib2)了

python爬虫学习手册-服务器渲染(基础库httplib2)了

作者: Wangthirteen | 来源:发表于2018-11-29 23:13 被阅读10次

    今天我在逛博客时候看到这么一个帖子,大概意思就是说爬虫不需要了解什么其他的别的,会个请求库,会个解析库就行了,但是我的心情跟吃了X一样的难受,这么忽悠小白好吗?虽然说是,是python方向里比较简单的一个分支,是有挺多重复的库,但是我觉得系统之所以为系统,就是因为包含了许多类似的知识,有些东西是不重要,但是你不能不知道,你可以不对所有的都是非常熟悉,但是不能不了解!好了,开始正题!

    一、是什么?

    httplib2是一个功能强大的网络请求库,其实它和urllib、urllib、requests都是类似的库,安装库

    pip install httplib2

    二、怎么用?

    既然它和其他的请求库类似那么就有着相似的方法,我们一条条来盘点下httplib2的强大方法!

    1.基本请求

    import httplib2
    h = httplib2.Http('result')  #获取的内容写入result目录下
    response, content = h.request('https://www.baidu.com/')
    

    最后会在result文件夹下生成一个名字叫

    www.baidu.com,e81c1f5749545c5f7d247b3a100ffe62

    这种的文件!可以使用记事本打开,里面会看见里面有这样的内容

    status: 200
    accept-ranges: bytes
    cache-control: no-cache
    connection: Keep-Alive
    content-length: 227
    content-type: text/html
    date: Thu, 29 Nov 2018 14:37:43 GMT
    etag: "5bfcae80-e3"
    last-modified: Tue, 27 Nov 2018 02:40:00 GMT
    p3p: CP=" OTI DSP COR IVA OUR IND COM "
    pragma: no-cache
    server: BWS/1.1
    set-cookie: BD_NOT_HTTPS=1; path=/; Max-Age=300, BIDUPSID=4164BB9449141E2F6F953DED296ECE6E; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, PSTM=1543502263; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
    strict-transport-security: max-age=0
    x-ua-compatible: IE=Edge,chrome=1
    content-location: https://www.baidu.com/
    
    <html>
    <head>
        <script>
            location.replace(location.href.replace("https://","http://"));
        </script>
    </head>
    <body>
        <noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>
    </body>
    </html>
    

    基本的请求分成里两部分
    1.创建Http对象,因为需要一个Http类型的对象
    2.就是进行基本的POST/GET请求
    而我们返回的内容分为两部分,一部分就是response包含的服务器返回的HTTP报头的内容,200表示请求成功,另一部分是Content里面包含的内容,也就是HTML页面,是服务器返回的实际数据

    2.缓存

    HTTPlib2有一个和其他的请求库不同的东西,我感觉还挺有意思,叫缓存,是的就是你想的那样,在一个默认的时间里你的同样的请求不会真的被发送到服务器,而是读取本地的缓存来返回给你!httplib2库默认是启用缓存,你可以设置不用缓存

    response2, content2 = h.request('http://www.baidu.com/', headers={'cache-control':'no-cache'})
    

    添加

    headers={'cache-control':'no-cache'}

    httplib2注意到我们添加了无缓存标头, 因此它完全绕过了它的本地缓存, 然后就会打开网络请求数据

    3.提交表单

    import urllib
    import httplib2
    from httplib2 import Http
    from urllib import urlencode
    h =httplib2.Http()#创建Http对象
    data = dict(name="Joe", comment="A test comment")#准备添加的数据
    response, content = h.request("http://www.baidu.com/", "POST", urlencode(data))#urlencode()#提交数据
    print(response)
    {'status': '200', 'transfer-encoding': 'chunked', 'vary': 'Accept-Encoding,User-Agent',
     'server': 'Apache', 'connection': 'close', 'date': 'Tue, 31 Jul 2007 15:29:52 GMT', 
     'content-type': 'text/html'}
    

    提交的data为字典类型

    4.设置cookie

    其他的请求库都能设置cookie,httplib2当然也能,代码如下

    import urllib
    import httplib2
    http = httplib2.Http()
    
    url = 'http://www.baidu.com/'   
    body = {'USERNAME': 'foo', 'PASSWORD': 'bar'}#账号和密码
    headers = {'Content-type': 'application/x-www-form-urlencoded'}
    response, content = http.request(url, 'POST', headers=headers, body=urllib.urlencode(body))
    headers = {'Cookie': response['set-cookie']}   ###将获得cookie设置到请求头中,以备下次请求使用
    url = 'http://www.baidu.com/'   
    response, content = http.request(url, 'GET', headers=headers)  ##本次请求就不用带用户名和密码
    

    5.设置代理

    import httplib2
    import socks ##需要第三方模块

    httplib2.debuglevel=4
    h = httplib2.Http(proxy_info = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, 'localhost', 8000))
    response,content = h.request("http://www.baidu.com/")

    6.request其他参数

    Http.request(self, uri, method='GET', body=None, headers=None, redirections=5, connection_type=None)
    执行单次的http请求
    uri:一个以'http' 或 'https'开头的资源定位符字串,必须是一个绝对的地址
    method:支持所有的http请求方式。如: GET, POST等
    body:请求的附件数据,一个经过urllib.urlencode编码的字符串
    headers:请求头信息,字典类型
    redirections:最大的自动连续的重定向次数默认为5

    7.httplib2的优点

    httplib2,一个第三方的开源库,它比http.client更完整的实现了HTTP协议,同时比urllib.request提供了更好的抽象。
    python的HTTP库不支持缓存,而httplib2支持。
    Python的HTTP 库不支持最后修改时间检查,而httplib2 支持。
    Python HTTP库不支持ETag,而httplib2支持.
    Python的 HTTP库不支持压缩,但httplib2支持。
    httplib2 帮你处理了永久重定向。它不仅会告诉你发生了永久重定向,而且它会在本地记录这些重定向,并且在发送请求前自动重写为重定向后的URL。

    参考:1.httplib2处理http的get和post
    2.惯例源码 httplib2源码

    相关文章

      网友评论

          本文标题:python爬虫学习手册-服务器渲染(基础库httplib2)了

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