用urllib库来实现账号登录的网页请求

2019-09-25  本文已影响0人  大风吹兮风清扬

完整的功能:获取个人中心的界面

1.代码登录(代码设置账号和密码)保存cookie

需要登录的url 个人中心的url
(1)获取cookie需要登录的url
(2)爬取个人中心需要个人中心的url

获取个人中心页面的数据


2.带着cookie 去请求个人中心

import urllib.request
from http import cookiejar
from urllib import parse

cookiejar用来管理cookie

1.1登录之前获取账号密码(登录界面)
1.2发送请求登录(账号密码)

请求头

url = "https://www.yaozh.com/login/"

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
           }
构造请求参数(post请求参数必须是字典)
login_from_data = {"username":"徒步珊瑚海3","pwd":"ym800314",
                   "formhash":"BE09D485AD","backurl":"https%3A%2F%2Fwww.yaozh.com%2F"}

post 请求上传的参数必须要是bytes

(1)将参数转译

log_bytes = parse.urlencode(login_from_data).encode("utf-8")

构造请求头对象

login_request = urllib.request.Request(url,headers=headers,data=log_bytes)
请求参数(get是拼接到url后面)
username: 徒步珊瑚海3
pwd: ym800314
formhash: BE09D485AD
backurl: https%3A%2F%2Fwww.yaozh.com%2F
发送post请求(登录成功保存cookie信息)
cook_jar = cookiejar.CookieJar()
创建可以添加cookie的处理器(handler)
因为默认urlopen的方式不能保存cookie
cook_handler = urllib.request.HTTPCookieProcessor(cook_jar)
根据handler创建opener
opener = urllib.request.build_opener(cook_handler)

发送请求

login_from_data即包含 请求头信息,又包含参数信息
发送请求如果登录成功自动帮助我们保存cookie
opener.open(login_request)

2访问个人中心界面(opener对象里面有cookie)

2.1 个人中心的url

center_url = "https://www.yaozh.com/member/"
构造请求对象
center_request = urllib.request.Request(center_url,headers=headers)
发送网络请求(拿着cookie信息去发送)
拿着刚刚创建好的opener去发送请求,因为这个opener里面保存了cookie
response = opener.open(center_request)

data = response.read().decode("utf-8")

with open("new.html","w",encoding="utf-8")as f:
    f.write(data)
上一篇 下一篇

猜你喜欢

热点阅读