zoukankan      html  css  js  c++  java
  • urllib基本使用 urlopen(),Request

    urllib包含的常用模块:
    import urllib.request # 打开和读取url请求
    import urllib.error # 异常处理模块
    import urllib.parse # url解析模块
    import urllib.robotparser # robots.txt解析模块

    """
    urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None,
    cadefault=False, context=None)
    url:  需要打开的网址
    data:默认为None,当data参数不为空的时候,提交方式为Post。
    timeout:设置网站的访问超时时间
    直接用urllib.request模块的urlopen()获取页面内容,返回的数据格式为bytes类型,需要decode()解码,转换成str类型

    # 1、 get请求
    import urllib.request

    response = urllib.request.urlopen('http://www.baidu.com/')
    print(response.read().decode('utf-8'))

    # 2、 post请求
    import urllib.request
    import urllib.parse

    data = bytes(urllib.parse.urlencode({'world':'hello'}),encoding='utf8')
    response = urllib.request.urlopen('http://httpbin.org/post',data= data)
    print(response.read().decode('utf-8'))

    # 3、超时时间
    import socket
    import urllib.request
    import urllib.error

    try:
    response = urllib.request.urlopen('http://httpbin.org/get',timeout= 1)
    except urllib.error.URLError as e:
    if isinstance(e.reason,socket.timeout):
    print('time out')

    urlopen返回对象提供方法:

    - read() , readline() ,readlines() , fileno() , close() :对HTTPResponse类型数据进行操作
    - info():返回HTTPMessage对象,表示远程服务器返回的头信息
    - getcode():返回Http状态码。如果是http请求,200请求成功完成;404网址未找到
    - geturl():返回请求的url
    - response.status :请求状态码
    - response.getheader(): 响应头信息,也可以传参数,获取特定的信息
    """

    """
    使用Request
    urllib.request.Request(url, data=None, headers={}, method=None)
    使用request()来包装请求,再通过urlopen()获取页面。
    1、data(默认空):是伴随 url 提交的数据(比如要post的数据),同时 HTTP 请求将从 "GET"方式 改为 "POST"方式。
    2、headers(默认空):是一个字典,包含了需要发送的HTTP报头的键值对。
    在 HTTP Request 中加入特定的 Header,来构造一个完整的HTTP请求消息。
    可以通过调用Request.add_header() 添加/修改一个特定的header 也可以通过调用Request.get_header()来查看已有的header。
    """
    url = 'http://httpbin.rog/post'
    # 通过 User-Agent 伪装成浏览器
    headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
    'Connection': 'keep-alive'
    }

    dict = {
    'name':'Andy'
    }

    data = bytes(urllib.parse.urlencode(dict),encoding='utf8')

    # url 连同data, headers,一起构造Request请求,构造并返回一个Request对象
    request = urllib.request.Request(url=url,data=data,headers=headers)

    #可以通过调用Request.add_header() 添加/修改一个特定的header
    #request.add_header("Connection", "keep-alive")
    #可以通过调用Request.get_header()来查看header信息
    #print(request.get_header(header_name='Connection'))

    # 第一个字母大写,后面的全部小写
    #print(request.get_header("User-agent"))

    # Request对象作为urlopen()方法的参数,发送给服务器并接收响应
    response = urllib.request.urlopen(request)
    html = response.read().decode('utf-8')
    print(html)


  • 相关阅读:
    Android 使用系统签名打包apk
    创业公司如何巧用工具提高团队生产力——豌豆荚创始人王俊煜讲述团队背后的“利器”
    Spring整合BoneCP+Hibernate配置数据连接池
    EhCache集群方案JGroups
    IOS 目录结构
    关于hibernate的缓存使用
    用webbrowser控件做一个资源管理器,如何得到IE控件中选中(鼠标多选)的文件名称列表?
    轮回!
    转载:谨以此文献给才毕业25年的朋友
    新的开始
  • 原文地址:https://www.cnblogs.com/AndyChen2015/p/7418053.html
Copyright © 2011-2022 走看看