Python爬虫实现自动登录与每日签到功能实战
本文介绍如何利用Python编写爬虫程序,结合Fiddler工具分析网络请求,实现特定素材网站的自动登录与每日签到功能。通过抓取登录接口和签到接口的参数及Cookie,程序可模拟用户操作自动获取积分,并可通过Windows任务计划实现定时运行,解决手动签到繁琐的问题。
更新记录:2016年8月9日。近期发现目标网站已屏蔽该登录签到接口(注:尽管如此,作者仍通过此方式获取了约一万点积分)。
Python爬虫自动签到背景与工具准备
此前,作者女友反映在某素材网站下载资源时积分常显不足。该网站积分主要通过每日登录签到获得,也可购买,但女友因使用频率低且易忘记签到,导致积分短缺。为解决这一痛点,作者编写了一个Python爬虫,旨在每日自动执行签到以积累积分。下文将详细解析相关代码实现。
本教程基于Python 3.4版本编写,使用Python 2.x的用户请自行参考其他相关资料。
辅助工具:Fiddler
首先需下载安装Fiddler软件。该工具用于监听网络请求,帮助分析具体的请求链接及传输参数。
访问目标网站:http://www.17sucai.com/,并点击登录按钮。

在尝试登录前,先启动Fiddler。此时Fiddler中尚未捕获到任何网络请求。随后回到网页,输入邮箱和密码并点击登录,再返回Fiddler查看捕获结果。

Fiddler列表中的第一个请求即为点击登录后发出的网络请求。点击该链接,可在右侧面板查看详细的请求信息。

点击“WebForms”标签页,可查看提交的具体请求参数,即用户名和密码。


使用Fiddler分析登录请求
接下来,通过代码实现上述登录功能。
Python登录功能代码实现
import urllib.request
import urllib
import gzip
import http.cookiejar
#定义一个方法用于生成请求头信息,处理cookie
def getOpener(head):
# deal with the Cookies
<pre name="code" class="python"> cj = http.cookiejar.CookieJar()
pro = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(pro)
header = []
for key, value in head.items():
elem = (key, value)
header.append(elem)
opener.addheaders = header
return opener
#定义一个方法来解压返回信息
def ungzip(data):
try: # 尝试解压
print('正在解压.....')
data = gzip.decompress(data)
print('解压完毕!')
except:
print('未经压缩, 无需解压')
return data
#封装头信息,伪装成浏览器
header = {
'Connection': 'Keep-Alive',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
'Accept-Encoding': 'gzip, deflate',
'X-Requested-With': 'XMLHttpRequest',
'Host': 'www.17sucai.com',
}
url = 'http://www.17sucai.com/auth'
opener = getOpener(header)
id = 'xxxxxxxxxxxxx'#你的用户名
password = 'xxxxxxx'#你的密码
postDict = {
'email': id,
'password': password,
}
postData = urllib.parse.urlencode(postDict).encode()
op = opener.open(url, postData)
data = op.read()
data = ungzip(data)
print(data)
清空Fiddler记录后运行程序,观察Fiddler中的捕获情况。

点击该链接,对比右侧请求信息,确认其与浏览器手动请求的内容一致。
以下是程序运行后打印的输出信息。

返回结果中code=200表示登录成功。
获取签到接口与Cookie处理
随后需获取签到接口的URL。为此,需使用一个未签到的账号在网站上点击签到按钮,并通过Fiddler捕获签到链接及相关信息。

点击“签到”按钮,签到成功后,在Fiddler中查看捕获到的URL。

点击该URL,可在右侧查看访问该链接所需的头信息(Headers)和Cookies等数据。由于登录成功后已获取Cookie,Python对Cookie处理有良好封装,以下代码展示了Cookie的具体使用方法。
cj = http.cookiejar.CookieJar()
pro = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(pro)
签到成功返回的信息中,code=200表示请求成功,day=1表示连续签到天数,score=20表示本次获得的积分数。

下方提供完整代码。测试时,需使用一个尚未签到的账号。
签到功能代码与定时任务配置
import urllib.request
import urllib
import gzip
import http.cookiejar
def getOpener(head):
# deal with the Cookies
cj = http.cookiejar.CookieJar()
pro = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(pro)
header = []
for key, value in head.items():
elem = (key, value)
header.append(elem)
opener.addheaders = header
return opener
def ungzip(data):
try: # 尝试解压
print('正在解压.....')
data = gzip.decompress(data)
print('解压完毕!')
except:
print('未经压缩, 无需解压')
return data
header = {
'Connection': 'Keep-Alive',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
'Accept-Encoding': 'gzip, deflate',
'X-Requested-With': 'XMLHttpRequest',
'Host': 'www.17sucai.com',
}
url = 'http://www.17sucai.com/auth'
opener = getOpener(header)
id = 'xxxxxxx'
password = 'xxxxxxx'
postDict = {
'email': id,
'password': password,
}
postData = urllib.parse.urlencode(postDict).encode()
op = opener.open(url, postData)
data = op.read()
data = ungzip(data)
print(data)
url = 'http://www.17sucai.com/member/signin' #签到的地址
op = opener.open(url)
data = op.read()
data = ungzip(data)
print(data)
与登录相比,签到仅在登录成功后重新打开一个链接即可。由于作者账号均已签到,此处不再展示运行截图。
最后一步是在电脑上编写bat脚本,并在Windows“任务计划”中添加定时任务,以实现自动化运行。

在此之前,需确保Python环境变量已配置正确,此处不再赘述。

至此,关于Python爬虫实现自动登录与签到功能的代码介绍完毕。如需了解更多Python爬虫相关内容,请搜索本站历史文章或继续阅读后续文章,感谢支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













