前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫 | 模拟登录气象家园论坛

爬虫 | 模拟登录气象家园论坛

作者头像
bugsuse
发布2020-04-21 17:20:57
2K1
发布2020-04-21 17:20:57
举报
文章被收录于专栏:气象杂货铺气象杂货铺

之前已经聊过了HTTP协议 爬虫 | 浅析HTTP协议 和 requests 库爬虫 | 优雅的HTTP库—requests

是时候实战一波了!既然属于气象领域,那你应该就知道气象家园论坛。逛家园下载资料时是需要积分的,而签到,回复,串门是能够获取积分的,为了让积分快点往上去,以便以后需要的时候下载更多的资料,你就要经常签到。作为小小程序猿,那么当然想自动化这部分工作了!

工具:Fiddler

使用Fiddler 分析工具分析气象家园论坛登录地址,签到地址以及一些其他登录所需要的信息。

具体的分析流程这里不再赘述。

气象家园论坛的登录地址为:

代码语言:javascript
复制
'http://bbs.06climate.com/member.php'

使用 Fiddler 分析出的登录链接附加了一些参数,都已经添加到程序中。

在分析的过程中没有找到一些参数的计算方式,所以不能直接给定用户名密码进行登录,还需要获取一些额外的参数值。

比如以下四个参数(图1绿色方框标注内容,主要在 Cookies 中获取):

代码语言:javascript
复制
bdshare_firstime
yuS3_2132_saltkey
yuS3_2132_auth
yuS3_2132_dsu_amupper

利用 浏览器或是 Fiddler 找到上述四个参数,将其值复制留用。

为了能够签到,还需要找到 formhash 参数值,这个利用 Fiddler 分析工具点击家园网页的签到按钮时会找到签到链接(图2蓝色方框),然后在右侧的数据中找到表单项(右侧蓝色方框),即可找到 formhash 值。

找到上述信息之后就不需要用户名和密码了,但是不能留空,可以是任意内容。

下面上代码:

代码语言:javascript
复制
import hashlib
import requests
from bs4 import BeautifulSoup

username =  'anything'
passwd = 'anything'

formhash = formhash

kwparm = {'saltkey' : yuS3_2132_saltkey,\
            'auth' : yuS3_2132_auth, \
            'dsu_amupper' : yuS3_2132_dsu_amupper}

psw = hashlib.md5(passwd.encode('ascii'))    
password = psw.hexdigest()

loginurl = 'http://bbs.06climate.com/member.php'
autourl = 'http://bbs.06climate.com/plugin.php'
homeurl = 'http://bbs.06climate.com/forum.php'
followurl = 'http://bbs.06climate.com/home.php'

header = {'Host': 'bbs.06climate.com', 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0', 
    'Referer': 'http://bbs.06climate.com/forum.php', 
    'Connection': 'keep-alive'}    

params = {'mod': 'logging', 
'action': 'login',
'loginsubmit': 'yes',
'infloat': 'yes', 
'lssubmit': 'yes', 
'inajax': 1}

foparam = {'mod' : 'follow', 
            'do': 'follower'}

loginData = {'fastloginfield': 'username', 
'username' : username, 
'password' : password,
'quickforward' : 'yes', 
'handlekey' : 'ls'}

cookie_value = 'bdshare_firstime=1476108193500; \
yuS3_2132_saltkey=%(saltkey)s; \
yuS3_2132_auth=%(auth)s; \
yuS3_2132_dsu_amupper=%(dsu_amupper)s' % kwparm 

cookie = {'Cookie': cookie_value}

s = requests.session()
getinfo = s.post(loginurl, params = params, 
            data = loginData, headers = header, 
            cookies = cookie)  

if getinfo.text.find(username) > 0:
    logout = True
    print(u'用户:%s 成功登录!' % username)
    homeinfo = s.get(homeurl, headers = header, cookies = cookie)
    hc = BeautifulSoup(homeinfo.text, 'lxml')
    rems = hc.find('a', {'id': 'myprompt'})
    rr = rems.get_text()
    ss = rr.replace(')', '(').split('(')
        
    auparams = {'id' : 'dsu_amupper', 
                'ppersubmit' : 'true',
                'formhash':  formhash,
                'infloat': 'yes', 
                'handlekey': 'dsu_amupper',
                'inajax' : 1, 
                'ajaxtarget' : 'fwin_content_dsu_amupper'}            
            
    autoinfo = s.get(autourl, params = auparams, cookies = cookie)        

    if len(ss) > 1:            
        message = u'%s 有 %s 条信息!请查看!' % (username, ss[1])
    elif len(ss) == 1:
        print(u'无新消息!')
    else:
        message = u'未知情况!'
    
    if autoinfo.text.find(u'累计签到') > 0:
        print(u'用户:%s 签到成功!' % username)
    elif autoinfo.text.find(u'无需再次签到!') > 0:
        print(u'用户:%s 已签到成功,无需再次签到!' % username)    
    else:
        message = u'用户:%s 签到出现问题!' % username
        print(message)             
else:
    logout = False
    message = u'用户:%s 登录失败!' % username
    print(message)

只需要将 formash, yuS3_2132* 等值替换为你所获取到的你的帐号相关值即可。

支持python2.x 和 python3.x,测试了2.7,3.5,3.6版本。

目前只支持登录,签到和查看有无消息并发送邮件到指定邮箱。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气象杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档