背景:
由于要买机票,所以一直进行搜索,爬虫可以帮我解决这个问题;

  • 用Python抓取携程网机票信息 过程纪实(上篇)

解释的超级详细。
于是通过这一过程,基本了解了一些;

  • 查询 上海 到 西安 4.29~05.02的机票:
#coding:utf-8import urllib2
from lxml import etree
import json
import random
import sys
reload(sys)
sys.setdefaultencoding('utf8')def get_json2(date,rk,CK,r):'''根据构造出的url获取到航班数据'''url= "http://flights.ctrip.com/domesticsearch/search/SearchFirstRouteFlights?DCity1=SHA&ACity1=SIA&SearchType=S&DDate1=%s&IsNearAirportRecommond=0&rk=%s&CK=%s&r=%s"%(date,rk,CK,r)headers={'Host':"flights.ctrip.com",'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",'Referer':"http://flights.ctrip.com/booking/hrb-sha-day-1.html?ddate1=2017-04-29"}headers['Referer']="http://flights.ctrip.com/booking/hrb-sha-day-1.html?ddate1=%s"%datereq=urllib2.Request(url,headers=headers)res=urllib2.urlopen(req)content=res.read()dict_content=json.loads(content,encoding="gb2312")length = len(dict_content['fis']) # print lengthi = 0for i in range(length):if ((dict_content['fis'][i][u'lp']) < 600 ):print (dict_content['fis'][i][u'lp']),print (dict_content['fis'][i][u'dt']),print (dict_content['fis'][i][u'at']) #print (dict_content['fis'][i][u'dpbn'])  def get_parameter(date):'''获取重要的参数date:日期,格式示例:2016-05-13'''url='http://flights.ctrip.com/booking/hrb-sha-day-1.html?ddate1=%s'%dateres=urllib2.urlopen(url).read()tree=etree.HTML(res)pp=tree.xpath('''//body/script[1]/text()''')[0].split()CK_original=pp[3][-34:-2]CK=CK_original[0:5]+CK_original[13]+CK_original[5:13]+CK_original[14:]rk=pp[-1][18:24]num=random.random()*10num_str="%.15f"%numrk=num_str+rkr=pp[-1][27:len(pp[-1])-3]return rk,CK,rif __name__=='__main__':dates=['2017-04-29','2017-04-30','2017-05-01','2017-05-02']for date in dates:rk,CK,r=get_parameter(date)get_json2(date,rk,CK,r)print "-----"

发送邮件程序(我找到出处就放上来):

# -*- coding: utf-8 -*-from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplibdef _format_addr(s):name, addr = parseaddr(s)return formataddr(( \Header(name, 'utf-8').encode(), \addr.encode('utf-8') if isinstance(addr, unicode) else addr))from_addr = raw_input('From: ')
password = raw_input('Password: ')
to_addr = raw_input('To: ')
smtp_server = raw_input('SMTP server: ')msg = MIMEText('Not just fly fight...', 'plain', 'utf-8')
msg['From'] = _format_addr(u'Air <%s>' % from_addr)
msg['To'] = _format_addr(u'126.Air <%s>' % to_addr)
msg['Subject'] = Header(u'flight……', 'utf-8').encode()server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1) # 正式用改为0就好啦
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

将查询信息和发送邮件的程序整合起来,大概就是这样,

#!/usr/bin/python
# -*- coding: utf-8 -*-import urllib2
from lxml import etree
import json
import random
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
import sys
reload(sys)
sys.setdefaultencoding('utf8')from_addr = "****@126.com" #raw_input('From: ')
password = "******" #raw_input('Password: ')
to_addr = "********@qq.com" #raw_input('To: ')
smtp_server = "smtp.126.com"#raw_input('SMTP server: ')def _format_addr(s):name, addr = parseaddr(s)return formataddr(( \Header(name, 'utf-8').encode(), \addr.encode('utf-8') if isinstance(addr, unicode) else addr))def get_json2(date,rk,CK,r):'''根据构造出的url获取到航班数据'''url= "http://flights.ctrip.com/domesticsearch/search/SearchFirstRouteFlights?DCity1=SHA&ACity1=SIA&SearchType=S&DDate1=%s&IsNearAirportRecommond=0&rk=%s&CK=%s&r=%s"%(date,rk,CK,r)headers={'Host':"flights.ctrip.com",'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",'Referer':"http://flights.ctrip.com/booking/hrb-sha-day-1.html?ddate1=2017-04-29"}headers['Referer']="http://flights.ctrip.com/booking/hrb-sha-day-1.html?ddate1=%s"%datereq=urllib2.Request(url,headers=headers)res=urllib2.urlopen(req)content=res.read()dict_content=json.loads(content,encoding="gb2312")length = len(dict_content['fis']) # print lengthi = 0for i in range(length):if ((dict_content['fis'][i][u'lp']) < 600 ):print (dict_content['fis'][i][u'lp']),print (dict_content['fis'][i][u'dt']),print (dict_content['fis'][i][u'at']),print (dict_content['fis'][i][u'dpbn'])  if ((dict_content['fis'][i][u'lp']) <= 450 ):msg = MIMEText(('%r at %s in %s'% ((dict_content['fis'][i][u'lp']),(dict_content['fis'][i][u'dt']),(dict_content['fis'][i][u'dpbn']))),'plain', 'utf-8')msg['From'] = _format_addr(u'Air <%s>' % from_addr)msg['To'] = _format_addr(u'126.Air <%s>' % to_addr)msg['Subject'] = Header(u'flight…%r '%(dict_content['fis'][i][u'lp']), 'utf-8').encode()server = smtplib.SMTP(smtp_server, 25)server.set_debuglevel(0)server.login(from_addr, password)server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()def get_parameter(date):'''获取重要的参数date:日期,格式示例:2016-05-13'''url='http://flights.ctrip.com/booking/hrb-sha-day-1.html?ddate1=%s'%dateres=urllib2.urlopen(url).read()tree=etree.HTML(res)pp=tree.xpath('''//body/script[1]/text()''')[0].split()CK_original=pp[3][-34:-2]CK=CK_original[0:5]+CK_original[13]+CK_original[5:13]+CK_original[14:]rk=pp[-1][18:24]num=random.random()*10num_str="%.15f"%numrk=num_str+rkr=pp[-1][27:len(pp[-1])-3]return rk,CK,rif __name__=='__main__':dates=['2017-04-29','2017-04-30','2017-05-01']for date in dates:rk,CK,r=get_parameter(date)get_json2(date,rk,CK,r)print "-----"

然后使用crontab 做一个定时任务,每20mins执行一次;
基本格式 :

*  *  *  *  *  command
分  时  日  月  周  命令 

so,

0,20,40 * * * * python ~/test.py

尽管有很多问题,正在学习。

Python爬虫抓取携程网机票信息并发邮件通知相关推荐

  1. python爬虫招聘-Python爬虫抓取智联招聘(基础版)

    原标题:Python爬虫抓取智联招聘(基础版) 作者:C与Python实战 「若你有原创文章想与大家分享,欢迎投稿.」 对于每个上班族来说,总要经历几次换工作,如何在网上挑到心仪的工作?如何提前为心仪 ...

  2. Python学习教程:Python爬虫抓取技术的门道

    Python学习教程:Python爬虫抓取技术的门道 web是一个开放的平台,这也奠定了web从90年代初诞生直至今日将近30年来蓬勃的发展.然而,正所谓成也萧何败也萧何,开放的特性.搜索引擎以及简单 ...

  3. 编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法

    这篇文章主要介绍了编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法,用到了Python的urllib和urllib2模块,需要的朋友可以参考下 抓取豆瓣电影TOP100 一.分析豆瓣top ...

  4. 如何用python爬股票数据_python爬虫股票数据,如何用python 爬虫抓取金融数据

    Q1:如何用python 爬虫抓取金融数据 获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为 ...

  5. Python爬虫抓取某音乐网站MP3(下载歌曲、存入Sqlite)

    Python爬虫抓取某音乐网站MP3(下载歌曲.存入Sqlite) 最近右胳膊受伤,打了石膏在家休息.为了实现之前的想法,就用左手打字.写代码,查资料完成了这个资源小爬虫.网页爬虫, 最主要的是协议分 ...

  6. python爬虫app步骤_Python爬虫抓取手机APP的传输数据,python爬虫抓取app

    Python爬虫抓取手机APP的传输数据,python爬虫抓取app 大多数APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,抓取超级课程表里用户发的话题. 1. ...

  7. 如何使用Python爬虫抓取数据?

    Python爬虫应用十分广泛,无论是各类搜索引擎,还是日常数据采集,都需要爬虫的参与.其实爬虫的基本原理很简单,今天小编就教大家如何使用Python爬虫抓取数据,感兴趣的小伙伴赶紧看下去吧! 工具安装 ...

  8. python爬虫抓取网站技巧总结

    不知道为啥要说是黑幕了??哈哈哈-..以后再理解吧 python爬虫抓取网站的一些总结技巧 学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛 ...

  9. 【python教程入门学习】Python爬虫抓取猫眼电影排行榜

    本节使用 Python 爬虫抓取猫眼电影网 TOP100 排行榜(https://maoyan.com/board/4)影片信息,包括电影名称.上映时间.主演信息. 在开始编写程序之前,首先要确定页面 ...

最新文章

  1. php获取http头信息,php如何获取http头信息
  2. pr导入html文件,视频怎么导入Premiere啊?
  3. Android 程序打包及签名
  4. SQLServer2008-镜像数据库实施手册(双机)SQL-Server2014同样适用
  5. 织梦dedecms转WordPress方法(脚本一键转换)
  6. 【待解决】使用JUnit时报错java.lang
  7. OpenCV配置及开发中遇到的问题
  8. AI编辑SVG格式的相关问题
  9. android studio进行增删改查代码_使用C#进行数据库增删改查(二)
  10. SQL 标准发布第 15 部分:ISO/IEC 9075-15:2019 多维数组(SQL/MDA)
  11. 光谱共焦传感器应用于哪些领域
  12. BZOJ 3097 Hash Killer I
  13. 琵琶行用计算机弹,琵琶行中的三次弹奏
  14. axios 的简化写法
  15. 9-java.sql.SQLException: Incorrect string value: ‘\xE9\x82\xA3\xE5\xB0\xB1‘ for column ‘content‘
  16. 先锋年度新品T1,真无线通话降噪蓝牙耳机测评
  17. 20220729 证券、金融
  18. 公司申请高新认定需要有多少个软件著作权证书?
  19. python写的简单游戏-1小球碰壁弹跳
  20. 7-112 斐波那契数列 (10 分)

热门文章

  1. 如何租房才不会被坑——复盘我租房之路
  2. JavaScript学习简单记录
  3. cos三次方积分_cos(t)的3次方公式是什么?
  4. 离线识别率最高的Python人脸识别系统
  5. Python timedelta 日期时间的加减等运算示例
  6. 基于asp.net高考志愿填报参考信息管理系统#毕业设计
  7. Android保存图片到手机相册(res下的图片,网络图片都可以)
  8. python编程基础张勇答案_2020智慧职教云课堂Python编程基础答案完整满分课后作业答案...
  9. 关于栅格系统布局的介绍
  10. 学生宿舍管理系统的设计与实现(课程论文)