美文网首页
post请求、json、正则

post请求、json、正则

作者: 沉吟不语 | 来源:发表于2018-11-17 14:44 被阅读16次

    post请求

    Request请求对象的里有data参数,它就是用在POST里的,我们要传送的数据就是这个参数data,data是一个字典,里面要匹配键值对。
    发起post请求
    代码:

    from urllib.parse import urlencode
    from urllib import request
    
    #目标url(https://httpbin.org/post这个接口是一个测试接口,可以从响应结果里中看到你发送给对方服务器的参数)
    req_url = 'https://httpbin.org/post'
    
    #构造一个表单数据
    formdata = {
        'name':'小明',
        'age':'29',
        'class':'1805',
        'gender':'男',
    }
    
    #1.需要将表单数据转换为url编码格式(urlencoding)
    #2.将转换后的字符串在转换为一个二进制数据(encode)
    data_tranform = urlencode(formdata).encode('utf-8')
    print(data_tranform)
    
    #如果不需要构建请求头
    response = request.urlopen(url=req_url,data=data_tranform)
    
    #状态码
    print(response.status)
    #获取响应体
    print(response.read().decode())
    

    json

    json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构

    • 1.对象:对象在js中表示为{ }括起来的内容,数据结构为 { key:value, key:value, ... }的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象这几种。
    • 2.数组:数组在js中是中括号[ ]括起来的内容,数据结构为 ["Python", "javascript", "C++", ...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

    json模块提供了四个功能:dumps、dump、loads、load,用于字符串 和 python数据类型间进行转换。

    导入json : import json
    

    1.json.dump():将python数据类型,转换为json字符串,并且可以将json字符串写入本地
    2.json.dumps():将python数据类型,转换为json字符串
    3.json.loads():将json数据类型,转换为python数据类型
    4.json.load():将json数据类型,转换为python数据类型,转换的是本地存储的json串

    #一个严格意义上的json串,必须是由数组(list)和字典(dict)两种数据组成
    # json串中的非数字数据,都必须使用双引号包裹起来
    
    import json
    
    # json.dump():将python数据类型,转换为json字符串,并且可以将json字符串写入本地
    # json.dumps():将python数据类型,转换为json字符串
    data = {
        'classname':'1805',
        'classinfo':'网络爬虫',
        'classnum':'26',
        'peoplelist':['小明','大明','小小明'],
    }
    json_str = json.dumps(data,ensure_ascii=False)
    print(json_str,type(json_str))
    # json.loads():将json数据类型,转换为python数据类型
    loads_data = json.loads(json_str)
    print(loads_data)
    print(type(loads_data))
    # json.load():将json数据类型,转换为python数据类型,转换的是本地存储的json串
    
    

    正则

    为什么要学正则表达式:

    实际上爬虫一共就四个主要步骤:

    • 明确目标 (要知道你准备在哪个范围或者网站去搜索)
    • 爬 (将所有的网站的内容全部爬下来)
    • 取 (去掉对我们没用处的数据)
    • 处理数据(按照我们想要的方式存储和使用)
      之前我们down下了的数据是全部的网页,这些数据很庞大并且很混乱,大部分的东西使我们不关心的,因此我们需要将之按我们的需要过滤和匹配出来。
    # \d 数字0-9
    # \D 非数字 -> [^\d]
    # \w 单词字符,数字,字母,下划线
    # \W 非单词字符 -> [^\w]
    # \s 匹配空白字符
    # \S 匹配非空白字符 -> [^\s]
    # ^ 以..开头
    # $ 以..结尾
    # r '正则':原始字符串
    # [0-9a-z]
    # [^0-9]
    
    # ():分组
    # |:或
    
    # #多字符匹配贪婪模式
    # . 除换行之外的任意字符
    # * 匹配*前面的字符任意次数
    # + 匹配+号前面的字符至少1次
    # ? 匹配?号前面的字符0次或1次
    # {n}:匹配前面的字符n次
    # {2,10}:表示匹配前面的字符可以出现 2~10 次
    
    # #非贪婪模式
    # .?
    # *?
    # +?
    # ??
    
    #如何在python中使用正则
    import re
    
    #将我们的正则表达式,构建为一个pattern对象
    re.compile()
    
    #从起始位置查找,匹配到结果立即返回,反之,返回None,单次匹配
    re.match()
    
    #从头匹配,在这个字符串中查找,匹配到结果立即返回,反之,返回None,单次匹配
    re.search()
    
    #在整个字符串中匹配,会将所有满足条件的结果返回,返回的是一个list.
    re.findall()
    
    #替换
    re.sub()
    
    #分割
    re.split()
    
    # 很findall方法类似,不过返回的是一个可迭代的对象,
    # 遍历之后,每一个值是一个match对象
    re.finditer()
    

    相关文章

      网友评论

          本文标题:post请求、json、正则

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