python代码分析03

from urllib import request#从urllib中导入request模块,主要用于想服务器发出请求,而返回相应的信息

with request.urlopen('https://blog.csdn.net/weixin_37598106/article/details/72847394') as f:#with一般用于打开某个文件
    print(type(f))#可以看到返回的f类型是一个class,所以f就具有很多方法
    data = f.read()#read()网站的内容
    print('Status:', f.status, f.reason)#返回状态码和reson
    for k, v in f.getheaders():#f.getheaders是一个字典,用来相应获得的header
        print('%s: %s' % (k, v))#打印k,v内容
    print('Data:', data.decode('utf-8'))#以utf-8的编码形式返回网站内容(json)
from urllib import request, parse#导入urllib大包的两个小包

print('Login to weibo.cn...')#输出登陆信息
email = input('邮箱或手机号: ')#输入用户名
passwd = input('密码: ')#输入密码
login_data = parse.urlencode([#当有中文或者“/”的时候,这是就需要用做urlencode一下编码转换。
    ('username', email),
    ('password', passwd),
    ('entry', 'mweibo'),
    ('client_id', ''),
    ('savestate', '1'),
    ('ec', ''),
    ('pagerefer', 'https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')
])

req = request.Request('https://passport.weibo.cn/sso/login')#请求这个网址,并赋值给req
req.add_header('Origin', 'https://passport.weibo.cn')#origin比较复杂,请参考https://blog.csdn.net/zdavb/article/details/51161130
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')#模拟手机登陆
req.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')#将这个http请求发给服务器后,如果服务器要求必须是某个地址或者某几个地址才能访问,往往这里可以看到是从那个搜索引擎过来的

with request.urlopen(req, data=login_data.encode('utf-8')) as f:#urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) url:需要打开的网址 data:Post提交的数据 timeout:设置网站的访问超时时间(也就是说前面传的是网址,后面是网址对应的信息)
    print('Status:', f.status, f.reason)
    for k, v in f.getheaders():
        print('%s: %s' % (k, v))
    print('Data:', f.read().decode('utf-8'))#因为前面使用urlencode转了码的,所以需要deconde解码

猜你喜欢

转载自blog.csdn.net/qq_37181884/article/details/81211835