python在网购中的小应用

        周末看到苏宁易购的抢购,研究了一下如果利用python做机器人来抢购

1.  抢购

        先人工试验了一下,结果太低估了秒杀的设计了,不仅有复杂的验证码,而且还有问题回答,

回答问题:"千金算尽还?来",其中?是什么字;没点文学修养,还没办法抢购了,彻底绝望

        看命中的结果:

xiaoyueyue****@163.com1个 验证成功 2011-12-17 11:00:15.021

hfhs**@yahoo.com.cn1个 验证成功 2011-12-17 11:00:15.028

158****68191个 验证成功 2011-12-17 11:00:15.036

137****53591个 验证成功 2011-12-17 11:00:15.06

        大概都花了15秒多,说明机器人的作用已经很小了

        网上找了一下资料,大概是用BeautifulSoup或者mechanize做网页数据采集(使用mechanize和BeautifulSoup轻松收集Web数据),拿到验证码图片

        先研究了一下验证码的自动识别

        验证码的破解组合有ImageMagick+tesseract,或者pytesser+tesseract+PIL,或者captchacker+LibSVM+PIL

        测试了一下前面两种组合,一般数字英文都没问题,但是对于淘宝,京东的验证码,成功率0%,第三种组合一直编译不过,看说明,hotmail/taobao验证码通过率50%,主要得益于LibSVM这个人工智能库

        captchacker README中提到:

LibSVM Pythonwrapper (not tested with latest version)

        编译不过估计是版本不对的原因

 

2.  价格监测

        抢购是无能为力了,写点简单的学习python,如果中意的一件商品降价了,而等到自己发现的时候,却销售一空了,非常可惜,下面代码就可以做到,实时监控价格,价格降到合适价位,发送邮件到邮箱,最终手机短信通知

        url是商品链接,price_accpet是可接受的价格,比如想买乔布斯传,先查看苏宁商品书籍“乔布斯传”的HTML源代码,找到促销价

<divclass="fridout_price02">易购价:<em>169 元</em></div>  

        总体流程就是每隔60S,利用urllib2拿到HTML,再用强大的BeautifulSoup解析HTML,拿到价格数据,对比心理价格,当价格到了心里价位的时候,就发邮件;这里发送到自己的139邮箱,而且在139邮箱中开通手机短信通知,如果商品价格调低了,马上就会发送邮件到139邮箱,顺便发送手机短信通知

'''
Created on 2011-12-17


@author: yhuang
'''
#!/usr/bin/python 
import os
import sys
import urllib2
from BeautifulSoup import BeautifulSoup
import time
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email import utils


COUNTER = 1
mail_server = "smtp.139.com"
mail_port = 25
use_tls = False
mail_username = "136758333**@139.com"
mail_password = "****"
mail_from = "136758333**@139.com"
mail_to = "136758333**@139.com"
subject_header = "price down"


def send_mail(msg):
    try:
        msg = MIMEText(msg.encode(),_charset='utf-8')
        msg['From'] = mail_from
        msg['To'] = mail_to
        msg['Subject'] = subject_header
        msg['Date'] = utils.formatdate(localtime=1)
        mailServer = smtplib.SMTP(mail_server, mail_port)
        if use_tls:
            mailServer.starttls()
        mailServer.login(mail_username, mail_password)
        mailServer.sendmail(mail_from,mail_to,msg.as_string())
        mailServer.close()
    except:
        print("send mail fail!")    
     
def monitor(url, price_accpet): 
    idx = 0
    timenow = time.strftime("%Y-%m-%d %X", time.localtime())
    while True:
    #for idx in range(COUNTER):
        try:
            page = urllib2.urlopen(url)
        except:
            print "timenow:%s,couldnot open this %s" %(timenow, url)
            continue
        page = unicode(page.read(),"gb2312","ignore").encode("gb2312","ignore")   
        soup = BeautifulSoup(page, fromEncoding="gb18030")  
          
        price_promotion_info = soup.find('div',{'class':'fridout_price02'}).em 
        price_promotion = price_promotion_info.string 
        #print price_promotion
        
        if price_promotion < price_accpet:
            send_mail(price_promotion)                             
        time.sleep(60)          
    print "program end"
                 
if __name__ == "__main__":                  
    monitor("http://www.suning.com/webapp/wcs/stores/servlet/prd_10052_10051_-7_439939_1.html", 100) 
     

3.  小结

        (1)如果把它放到google pythonapp上,这样就不用开自己电脑了,(2)如果遇到价格是转换过的,是一个png图片,就必须借助上面组合库来解析出价格来,(3)如果可以采集到购物车中价格最好,因为可以同时关注N多的信息,而且购物车中价格肯定是字符串的


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值