zoukankan      html  css  js  c++  java
  • urllib

    urllib

    Python 标准库 urllib2 的使用细节

    python 2.x

    3.x

    from urllib import request
    
    with request.urlopen('https://api.douban.com/v2/book/2129650') as f:
        data = f.read()
        print('Status:', f.status, f.reason)
        for k, v in f.getheaders():
            print('%s: %s' % (k, v))
        print('Data:', data.decode('utf-8'))

    模拟浏览器

    from urllib import request
    
    req = request.Request('http://www.douban.com/')
    req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
    with request.urlopen(req) as f:
        print('Status:', f.status, f.reason)
        for k, v in f.getheaders():
            print('%s: %s' % (k, v))
        print('Data:', f.read().decode('utf-8'))

    兼容Python2.x 3.x

    #!/usr/bin/python
    #-*-coding:utf-8-*- 
    
    import json
    import os
    import re
    
    try:
        from urllib.parse import urlencode
        from urllib.request import Request, urlopen
    except:
        from urllib import urlencode
        from urllib2 import Request, urlopen
    
    def get_token():
        req = Request("%s/authorizations/user_token/%s" % (os.environ.get('JPY_HUB_API_URL'), os.environ.get('JPY_USER')))
        req.add_header('Authorization', "token %s" % os.environ.get('JPY_HUB_API_TOKEN'))
        req.add_header("Host", "192.168.176.100")
        req.add_header("Referer", "%s/authorizations/user_token" % os.environ.get('JPY_HUB_API_URL'))
    
        data_success = None
        data_error = None
    
        try:
            f = urlopen(req)
        except:
            print('fail to open')
            exit(-1)
    
        try:
            data_success = f.read()
        except:
            data_error = {"user_token": ""}
        finally:
            f.close()
    
        if not data_error is None:
            data = data_error
        else:
            data = json.loads(data_success.decode('utf-8'))
    
        return data["user_token"]
    
    def validate_year(v):
        pattern = re.compile(r'^d{4}$')
    
        match = pattern.match(str(v))
    
        if match:
            return True
        else:
            return False
    
    def get_data(url):
        req = Request(url)
        req.add_header('Authorization', "Bearer %s" % get_token())
        data_success = None
        data_error = None
    
        try:
            f = urlopen(req)
        except:
            print('fail to open')
            exit(-1)
    
        try:
            data_success = f.read()
        except:
            data_error = {"errmsg": "请求发生错误"}
        finally:
            f.close()
    
        if not data_error is None:
            data = data_error
        else:
            data = json.loads(data_success.decode('utf-8'))
    
        return data
    
    def get_market_list():
        url = 'https://xxx.xx.xxx/quote/v1/market/list'
        #url = 'http://127.0.0.1:8000/json/market_list.json'
        
        return get_data(url)
    
    def get_market_holiday(finance_mic, date=None):
        mic = ('O', 'N', 'A', 'HK', 'DCE', 'SHFE', 'SZ', 'SS', 'CZCE')
        if not finance_mic in mic:
            return {"errmsg": "参数错误"}
    
        if not date is None and 
            not validate_year(date):
            return {"errmsg": "参数错误"}
    
        search = urlencode([
            ('finance_mic', finance_mic),
            ('date', date)
        ])
    
        url = 'https://xxxx.xx.xxx/quote/v1/market/holiday?%s' % search
        
        return get_data(url)
  • 相关阅读:
    企业云盘安全性如何 怎样部署
    Sentinel 控制台部署
    nginx代理静态页面添加二级目录
    java socket
    IDEA
    golang代码生成器
    es 单节点问题
    代码模板
    错误摘要 HTTP 错误 403.14
    安装.Net Framework 4.6.2无法安装的2种情况
  • 原文地址:https://www.cnblogs.com/jzm17173/p/5006702.html
Copyright © 2011-2022 走看看