需要注意的是获取验证码不能用requests,而是session
import requests
from bs4 import BeautifulSoup
# __VIEWSTATE: /seNtJrexUAvx4/W7G3vYOBdV145buSzmPFE1iFe+FKqyJtArfEdTOHf+PRvGAMQIBrd2I4MfwMw79Ek0uR3aNhuDkdv6nFQLwqUFOCCFuSiyz2WEuUeixFs0c7RiVtRJXbjaZGgyNC0mk3eFQkjuDUpI14=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://www.gushiwen.cn/user/collect.aspx
# email: 13592199535@163.com
# pwd: 123456
# code: yfua
# denglu: 登录
# 这是登陆页面的url地址
url = 'https://www.gushiwen.cn/user/login.aspx?from=http://www.gushiwen.cn/user/collect.aspx'
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
}
# 获取页面的源码
response = requests.get(url=url, headers=headers)
content = response.text
# 解析页面源码 然后获取_VIEWSTATE __VIEWSTATEGENERATOR
soup = BeautifulSoup(content, 'lxml')
# 获取_VIEWSTATE
viewstate = soup.select('#__VIEWSTATE')[0]['value']
# .attrs.get('value')
# print(viewstate)
# 获取__VIEWSTATEGENERATOR
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0]['value']
# print(viewstategenerator)
code = soup.select('#imgCode')[0].attrs.get('src')
code_url = 'https://www.gushiwen.cn/' + code
# 有坑
# import urllib.request
# 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('088-code.jpg', 'wb') as f:
f.write(content_code)
# 获取了验证码的图片之后 下载到本地 然后观察验证码 观察之后 然后在控制台输入这个验证码 就可以将这个值给
# code的参数 就可以登陆
code_name = input('请输入你的验证码:')
url_post = 'https://www.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fwww.gushiwen.cn%2fuser%2fcollect.aspx'
data = {
'__VIEWSTATE': viewstate,
'__VIEWSTATEGENERATOR': viewstategenerator,
'from': 'http://www.gushiwen.cn/user/collect.aspx',
'email': '13592199535@163.com',
'pwd': 'qiao123..',
'code': code_name,
'denglu': '登录',
}
response_post = session.post(url=url_post, data=data, headers=headers)
content_post = response_post.text
with open('088-gsw.html', 'w', encoding='utf8') as fp:
fp.write(content_post)