如何科学的抢红包第二弹

0×00 背景

今天拜读了来自IDF实验室的《如何科学的抢红包:年末致富有新招,写个程序抢红包》,自己这段时间正在学习爬虫的相关知识,对scrapy框架有所了解,就在此代码基础上加进了scrapy,利用scrapy对文章中的“0×04 爬取红包列表”进行了重写。

0×01 scrapy框架

Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

Scrach,是抓取的意思,这个Python的爬虫框架叫Scrapy,大概也是这个意思吧,就叫它:小刮刮吧。

简单的一句话:利用scrapy可以很简单的写出爬虫。

0×02 微博登入、红包可用性检查、指定红包抓取模块

这几个模板我单独放在一个weibo类中,方面后面的scrapy的调用分析

微博登入这块,可以参照http://www.tuicool.com/articles/ziyQFrb 这篇文章,里面很详细的记录了微博登入的全过程

代码copy大牛,并在此基础上进行了简单的修改:使用requests库进行页面的请求。

#------------------------------------------------------------------------------- # Name:        weibo # Purpose: # # Author:      adrain # # Created:     14/02/2015 # Copyright:   (c) adrain 2015 # Licence:     <your licence> #------------------------------------------------------------------------------- #!/usr/bin/env python import sys import requests import re import base64 import urllib import rsa import binascii import os import json class weibo():     def __init__(self):         reload(sys)         sys.setdefaultencoding('utf-8&')     def weibo_login(self,nick,pwd):         print u'---weibo login----'         pre_login_url='http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.15)&_=1400822309846' % nick
        pre_logn_data=requests.get(pre_login_url).text;         #print pre_logn_data         servertime=re.findall('"servertime":(.*?),',pre_logn_data)[0]         pubkey = re.findall('"pubkey":"(.*?)",' , pre_logn_data)[0]         rsakv = re.findall('"rsakv":"(.*?)",' , pre_logn_data)[0]         nonce = re.findall('"nonce":"(.*?)",' , pre_logn_data)[0]         login_url='http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)'         su=base64.b64encode(urllib.quote(self.nick))         rsaPublickey= int(pubkey,16)         key = rsa.PublicKey(rsaPublickey,65537)         message = str(servertime) +'\t' + str(nonce) + '\n' + str(self.pwd)         sp = binascii.b2a_hex(rsa.encrypt(message,key))         post_data={                     'entry': 'weibo',                     'gateway': '1',                     'from': '',                     'savestate': '7',                     'userticket': '1',                     'pagereferer':'',                     'vsnf': '1',                     'su': su,                     'servertime': servertime,                     'nonce': nonce,                     'pwencode': 'rsa2',                     'rsakv' : rsakv,                     'sp': sp,                     'encoding': 'UTF-8',                     'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',                     'returntype': 'META',                     'ssosimplelogin': '1',                     'vsnval': '',                     'service': 'miniblog',                     }         header = {'User-Agent' : 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'}         login_data=requests.post(login_url,data=post_data,headers=header).text.decode("utf-8").encode("gbk",'ignore')         try:             suss_url=re.findall("location.replace\(\'(.*?)\'\);" , login_data)[0]             login_cookie=requests.get(suss_url).cookies
            return login_cookie
            print '----login success---'         except Exception,e:             print '----login error----'             exit(0)     def log(self,type,text):             fp = open(type+'.txt','a')             fp.write(text)             fp.write('\r\n')             fp.close()     def check(self,id):         infoUrl='http://huodong.weibo.com/hongbao/'+str(id)         html=requests.get(infoUrl).text
        if 'action-type="lottery"' in  html or True: 

本博客所有文章如无特别注明均为原创。作者:封笔尘缘复制或转载请以超链接形式注明转自 封笔尘缘
原文地址《如何科学的抢红包第二弹
分享到:更多

相关推荐

网友评论(0)