发起post请求
eg:
# 测试接口:'https://httpbin.org/post'
from urllib import parse,request
url = 'https://httpbin.org/post'
# 表单数据
fordata = {
'name':'哎呦喂',
'age':18,
'gender':'男',
}
# 先使用urlencode将参数转为url编码格式的字符串,
# 再用encode将字符串转换为bytes类型的参数
formdata = parse.urlencode(fordata).encode('utf-8')
# 不需要请求头
response = request.urlopen(url,data=formdata)
print(response.status)
print(response.read().decode('utf-8'))
# 需要请求头
red_header = {
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
req = request.Request(url,headers=red_header,data=fordata)
response = request.urlopen(req)
print(response.status)
print(response.read().decode('utf-8'))
正则
多字符匹配
. :表示匹配除了换行符以外的任意字符
\ :转义字符
【a-z】:匹配a到z中任意字符
\d :匹配数字 【0-9】
\D :匹配非数字 [^\d]
\s ;匹配空白字符(空格,\n,\t...)
\S: 匹配非空白字符
\w :匹配单词字符【A-Z a-z 0-9】
\W :匹配非单词字符[^\w]
^ :以什么开头
$ :以什么结尾
():表分组
| :或
贪婪匹配
" * " :匹配前一个字符任意次
'+':匹配前一个字符至少一次
? :匹配前一个字符0次或一次
{m}:匹配前一个字符m次
{m,n}:m-n次
非贪婪匹配
*? :
+? :
?? :
{m,n}? :
eg:
import re
# 把正则表达式构建为一个parttern对象
sub_str = 'abcdefgabcd'
pattern = re.compile('a')
# 从字符串起始位置开始匹配,开头就必须符合正则规则
# 如果匹配到结果返回结果,没匹配到就返回None
result = re.match(pattern,sub_str)
print(type(result))
if result:
print(result.group())
#在整个字符串中进行匹配 ,同样是单次匹配 ,
# 匹配到结果立即返回,匹配不到返回None
result = re.search(pattern,sub_str)
print(result.group())
# 在整个正则匹配,匹配出所以符合正则的结果,以列表形式返回,
# 匹配不到返回空列表
result = re.findall(pattern,sub_str)
print(result)
# 在整个正则匹配,匹配出所以符合正则的结果,
# 返回一个迭代器
result = re.finditer(pattern,sub_str)
print(type(result))
for note in result:
print(type(note))
print(note.group())
# 替换
url = 'http://www.baidu.com/s?kw=aaa&pn=20'
# pattern, \正则规则
# repl,\要替换的字符串
# string,原始字符串
pattern = re.compile('pn=\d+')
result = re.sub(pattern,'pn=30',url)
print(result)
# 分割 re.split()
pattern = re.compile('[=:&]')
result = re.split(pattern,url)
print(result)
# sub_html =
# re.S可以让点可以匹配包括
re.compile(
'<div.*?class="threadlist_title pull_left j_th_tit ">'+
'.*?<a.*?herf="(.*?)".*?</div>',re.S
)
网友评论