问题描述:
(1) 写一个程序,以一定时间频率刷新apple store(http://store.apple.com/hk-zh/buy-iphone/iphone6/),判断货物有/无状态;
(2)当有货的时候,发一个短信给你手机(有很多实现方法,最简单就是注册一个139信箱了,具体请大家google);
(3) 注册一个账户,当有货的时候自动下单,若成功则发短信提醒。
1、判断iphone6的有无
查看了一下页面的源代码,粗略的查看了一遍,就发现了下面这一段:
从汉字部分往前看,前面刚好就是尺寸、颜色、内存、价格、一共有18个和网页上一致。那么接下来,通过正则表达式查找相同部分:dimensionScreensize":"(.*?)","dimensionColor":"(.*?)","dimensionCapacity":"(.*?)","partNumber":".*?","price":"(.*?)","displayShippingQuote":"(.*?)".*?},然后比较最后一个,就可以知道哪种有货了。
2、怎么自动发送短信?
百度google了一下,有了如下代码:
<span style="font-size:18px;">def sendmail(to_list,sub,con):
mail_host="smtp.139.com"
mail_user="***.com"
mail_pass="***"
mail_postfix="mail.139.com"
me = mail_user+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEMultipart('related')
msg['Subject'] = email.Header.Header(sub,'utf-8')
msg['From'] = me
msg['To'] = ";".join(to_list)
msg.preamble = 'This is a multi-part message in MIME format.'
msgAlternative = MIMEMultipart('alternative')
msgText = MIMEText(con, 'plain', 'utf-8')
msgAlternative.attach(msgText)
msg.attach(msgAlternative)
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me, to_list, msg.as_string())
s.quit()
except Exception,e:
return False
return True</span>
综合爬虫,就可以完成一二任务。
3、如何登录?
iPhone6现在是没货的,那现在只能用iPhone5来进行测验。
要加入购物车保存起来,肯定是要登录的,我们来看看这是怎么个情况。
清一色的GET!!
这和想象的不一样啊,没有POST表单它是怎么登录的?难道这样也可以?搜了下,也没有找到合适的答案。
在一次检测时,输错密码,监视到它执行了一个POST方法,它提交了一个表单,其中就包含我的id和密码以及一串看不懂的元素。那哪些是变化的,哪些又是不变的?
从不同的网页进入,发现表单的一些元素是会改变的,猜想它和输入密码后要转跳的地址应该有关系。
接下来就开始实验了。先将完整的表单照搬入,读取返回的结果如下:
发现其中的url就是跳转的页面。
也就是说,从不同的页面进行登录,它的表是不同的,登录成功后跳转的地址也是不同的。
4、登录后,怎么把东西加入购物车呢?
继续监视加入购物车操作。。发现它执行的第一个GET中有这样的请求:
展开看请求,就能发现其中包含有加入购物车的货物信息。筛选出必要的元素加入表单,来打开url,经过修改,总算成功。
5、如何连续操作页面,把想要的iPhone加入购物车?
对网页连续操作,我用的是cookielib,主要学习于:http://www.cnblogs.com/sysu-blackbear/p/3629770.html
以上都是在对一个型号的进行操作,添加特定的表单,那怎么加任意型号呢?