• urllib的使用


    urllib的使用

    1. response = urllib.request.urlopen(url, [data=None, timeout=...])

    • url: 请求的url
    • data: 请求的data, 如果设置了这个值,那么将变成post请求
    • response返回值:返回值是一个 http.client.HTTPResponse对象,这个对象是一个类文件句柄对象, 有如下方法:
      • read([size]): 读取指定字节大小的数据,默认为读取全部内容
      • readline(): 读取一行
      • readlines(): 一交读取一行,直到读取完所有数据,返回一个列表
      • getcode(): 响应状态码
    from urllib import request
    
    response = request.urlopen('http://httpbin.org/get')
    
    # response.read(1024)    # 读取全部
    # response.readline()  # 读取一行
    # print(type(response))
    print(response.readlines())   # 读取多行
    print(response.getcode())
    
    [b'{
    ', b'  "args": {}, 
    ', b'  "headers": {
    ', b'    "Accept-Encoding": "identity", 
    ', b'    "Host": "httpbin.org", 
    ', b'    "User-Agent": "Python-urllib/3.6", 
    ', b'    "X-Amzn-Trace-Id": "Root=1-5e351708-72df268451f52bfe8d6e281a"
    ', b'  }, 
    ', b'  "origin": "180.137.6.157", 
    ', b'  "url": "http://httpbin.org/get"
    ', b'}
    ']
    200
    

    2. urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)

    可以方便的将网上的文件保存到本地

    request.urlretrieve('https://dss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1208538952,1443328523&fm=26&gp=0.jpg', './1.png')
    
    ('./1.png', <http.client.HTTPMessage at 0x1ebf1561e48>)
    

    3. urllib.parse.urlencode(): 将字典进行编码; urllib.parse.quote(): 将字符串(汉字)进行编码

    url中如果包含了中文,则需要编码,urlencode 可以把字典数据转换为url编码的数据

    from urllib import parse
    
    data = {'name': '成'}
    qs = parse.urlencode(data)
    print(qs)
    print(parse.quote('成'))
    
    name=%E6%88%90
    %E6%88%90
    

    4. urllib.parse.parse_qs()

    将编码后的字符串进行解码

    qs = 'name=%E6%88%90'
    parse.parse_qs(qs)
    
    {'name': ['成']}
    

    5. urllib.parse.urlparse(url) 和 urlsplit(url)

    对url 的各个组成部分进行分割, 两个基本上是一样的, 唯一不同的是urlparse多了一个params属性

    url = "https://www.baidu.com/s?name=cheng&wd=python"
    print(parse.urlparse(url))
    print('*'*30)
    print(parse.urlsplit(url))
    
    ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='name=cheng&wd=python', fragment='')
    ******************************
    SplitResult(scheme='https', netloc='www.baidu.com', path='/s', query='name=cheng&wd=python', fragment='')
    

    6. urllib.request.Request 类

    如果想要在请求的时候增加一些请求头,那么就必须使用 request.Request 类来实现。如增加一个 User-Agent

    url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'
    }
    # 构建 req 对象
    req = request.Request(url, headers=headers)   # 没有添加上请求头的话,对方服务器就会识别出你是非法的请求
    response = request.urlopen(req)
    # response.read().decode()
    
    # 发送 post 请求
    def post_lagou():
        data = {
            'user': 'long',
            'hello': '世界你好'
        }
        data = parse.urlencode(data).encode('utf-8')
        print(data)
        url = "http://httpbin.org/post"
        req = request.Request(url, data=data, headers=headers, method='POST')
        response = request.urlopen(req)
        print(response.read().decode('utf-8'))
    # post_lagou()
    
    
    
  • 相关阅读:
    贝塞尔曲线
    行为树
    Astar寻路算法
    vuex入门
    关于用户留存率的计算的几个层次-费元星
    linux命令执行返回值(附错误对照表)费元星
    rabbitmqadmin安装与使用
    分布式锁服务 分布式协调系统
    记录一次使用react异步不更新数据的问题
    从0到1搭建前端异常监控系统(Vue + Webpack + Node.js + Egg.js + Jest)
  • 原文地址:https://www.cnblogs.com/nichengshishaonian/p/12249186.html
Copyright © 2020-2023  润新知