post请求、json、正则

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、正则)