用python代码模拟登录网站
方法一:直接使用已知的cookie访问
特点:
简单,但需要先在浏览器登录
具体步骤:
1.用浏览器登录,获取浏览器里的cookie字符串
先使用浏览器登录。再打开开发者工具,转到network选项卡。在左边的Name一栏找到当前的网址,选择右边的Headers选项卡,查看Request Headers,这里包含了该网站颁发给浏览器的cookie。对,就是后面的字符串。把它复制下来,一会儿代码里要用到。
注意,最好是在运行你的程序前再登录。如果太早登录,或是把浏览器关了,很可能复制的那个cookie就过期无效了。
urllib库的版本代码
1 """ 2 直接获取 个人中心的页面 3 手动粘贴 辅助 pc 抓包的 cookies 4 放在 request对象的请求头里面 5 """ 6 7 import urllib.request 8 9 #1 数据url 10 url = "https://www.yaozh.com/member/" 11 #2 添加请求头 12 headers = { 13 "User-Agent":" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3650.400 QQBrowser/10.4.3341.400" 14 ,"Cookie":"acw_tc=2f624a7515558225995774143e31e6ef327f4bf5a2beec95289a6d4258f121; PHPSESSID=1rhel4pftt6lbmc6bhtkpjn7u4; yaozh_logintime=1555822916; yaozh_user=734735%09huazaid; yaozh_userId=734735; MEIQIA_VISIT_ID=1KA8DcXDfMW6WEeGhLuPgn9T0p0; yaozh_uidhas=1; yaozh_mylogin=1555822922; acw_tc=2f624a7515558225995774143e31e6ef327f4bf5a2beec95289a6d4258f121; MEIQIA_VISIT_ID=1KA8DcXDfMW6WEeGhLuPgn9T0p0" 15 } 16 #3 构建请求对象 17 request = urllib.request.Request(url,headers=headers) 18 #4 发送请求对象 19 response = urllib.request.urlopen(request) 20 21 #5 读取数据 22 data = response.read() 23 #保存到文件中,验证数据 24 with open("01cook.html","wb")as f: 25 f.write(data)
方法二:直接使用账号密码登录访问
退出登录,按F12 ,再登录,抓取数据
formhash和backurl要在登陆之前找
代码
1 """ 2 获取 个人中心的页面 3 1.代码登录 登录成功 cookie(有效) 4 2. 自动带着cookie 去请求个人中心 5 6 cookiejar 自动保存这个cookie 7 """ 8 import urllib.request #请求库 9 from http import cookiejar #保存cookie用的 10 from urllib import parse #转译 11 #登录之前的, 登录页的网址https://www.yaozh.com/login 12 #找登录参数 13 14 #后台 根据你发送的请求方式来判断的 如果你是get(登录页面),如果POST(登录结果) 15 #1.代码登录 16 # 1.1 登录的网址 17 login_url = "https://www.yaozh.com/login" 18 19 20 #1.2 登录的参数 21 login_form_data = { 22 "username": "用户", 23 "pwd": "密码", 24 "formhash": "E2F4BF731C", 25 "backurl": "https%3A%2F%2Fwww.yaozh.com%2F", 26 27 } 28 #1.3 发送登录请求POST 29 cook_jar = cookiejar.CookieJar() 30 #定义有添加 cook 功能的 处理器 31 cook_hanlder = urllib.request.HTTPCookieProcessor(cook_jar) 32 #根据处理器 生成 opener 33 opener = urllib.request.build_opener(cook_hanlder) 34 35 #带着参数 发送post请求 36 #添加请求头 37 headers = { 38 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3650.400 QQBrowser/10.4.3341.400"} 39 #1 参数 将来 需要转译 转码; 2 post 请求的 data 要求是bytes 40 login_str = parse.urlencode(login_form_data).encode('utf-8') 41 login_request = urllib.request.Request(login_url,headers=headers,data=login_str) 42 #如果登录成功,cookjar自动保存cookie 43 opener.open(login_request) 44 45 # 2 代码带着cookie去访问 个人中心 46 center_url = "https://www.yaozh.com/member/" 47 center_request = urllib.request.Request(center_url,headers=headers) 48 response = opener.open(center_url) 49 #bytes -->str 50 data = response.read().decode() 51 52 with open("02cook.html","w",encoding="utf-8")as f: 53 f.write(data)