Python爬虫---Requests---cookie登录

# 通过登录,进入到主页
# 参数

# "__VIEWSTATE": "+N18YJA9t9MakvHXxSB07FGkZaqWVYFxG0FeK35O4v1ZQTn3zatJIYIyk0tElbTsN3es8uiVQDN5D3UL30DnxFN5tsMgWozGfwT8Q45XrZsfeq31jScKWKdI2akZMY6nTF6kvA62ngZsU4kc0WvE0voj5Aw="
# "__VIEWSTATEGENERATOR": "C93BE1AE",
# "from": "http://so.gushiwen.cn/user/collect.aspx",
# "email": "[email protected]",
# "pwd": "123456789",
# "code": code_name,
# "denglu": "登录",

# __VIEWSTATE  __VIEWSTATEGENERATOR   code  是变量
# 难点1):__VIEWSTATE  __VIEWSTATEGENERATOR   一般情况下,看不见的都是页面源码
#        我们观寨到这两个数据在页面的源码中 所以我们需要获取页面的源码 然后进行解析就可以获取了
# 难点2:code 验证码

import requests
from bs4 import BeautifulSoup
import urllib.request

# 1. 登陆页面的url地址
url_get = "https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"

# 2. 请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

# 3. 获取网页源码,get请求
response = requests.get(url=url_get, headers=headers)
content = response.text
# print(content)

# 4. 使用bs4解析页面源码,然后获取__VIEWSTATE  __VIEWSTATEGENERATOR
soup = BeautifulSoup(content, "lxml")
# 4.1 获取__VIEWSTATE
viewstate = soup.select("#__VIEWSTATE")[0].attrs.get("value")
# 4.2 获取__VIEWSTATEGENERATOR
viewstategenerator = soup.select("#__VIEWSTATEGENERATOR")[0].attrs.get("value")
print(viewstate)
print(viewstategenerator)

# 获取了验证码的图片后下载到本地,观察验证码,观察之后,然后再控制台输入验证码,就可以将这个值给code的参数,就可以登录了
# 5. 获取验证码图片
code = soup.select("#imgCode")[0].attrs.get("src")
code_url = "https://so.gushiwen.cn" + code
# print(code_url)

# 6. 下载验证码----不能这样下,因为登陆时再次请求验证码会改变,可以使用requests的session方法
# urllib.request.urlretrieve(url=code_url, filename="code.jpg")

# requests里面有一个方法session() 通过session的返回值,就能使请求变成一个对象
session = requests.Session()

# 验证码的url内容
response_code = session.get(code_url)
# 注意此时要使用二进制数据 因为我们要使用的是图片的下载
content_code = response_code.content
# wb的模式就是将二进制数据写入到文件
with open("code.jpg","wb") as fp:
    fp.write(content_code)


# 7. 输入验证码
code_name = input("请输入你的验证码")

# 点击登录url
url_login_post = "https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx"

# 登录参数
data_post = {
    "__VIEWSTATE": viewstate,
    "__VIEWSTATEGENERATOR": viewstategenerator,
    "from": "http://so.gushiwen.cn/user/collect.aspx",
    "email": "[email protected]",
    "pwd": "5966153an",
    "code": code_name,
    "denglu": "登录",
}

# 发起请求,这里不能用requests请求,需要用session,才会保证验证码请求和登录请求是同一个
# response_post = requests.post(url=url_login_post, headers=headers, data=data_post)
response_post = session.post(url=url_login_post, headers=headers, data=data_post)

content_post = response_post.text

with open("gushige.html", "w", encoding="utf-8") as fp:
    fp.write(content_post)

你可能感兴趣的:(python,爬虫,开发语言)