我们看一下效果
我实现的功能是
1、爬虫热门城市之间航班信息的查询
2、 存储到mysql数据库中;
当然你也可以爬取所有城市之间的航班信息,我会提供完整的city代码给你;只是我需要实现的是自动功能;
我们要学会怎么爬虫,而不是复制代码,然后改不出来就一直停滞那里,然后骂别人写的垃圾;
我们先看一下携程网的信息
从以上我们可以获取两个信息
1、我是从上海到成都的
2、7条航班信息
教你如何爬虫
我不教静态网页的爬虫,因为太简单了;我们直接上手携程网
我们到这个上述这个页面以后,我推荐用谷歌浏览器,方便;
1、谷歌浏览器
2、携程网显示机票信息页面
3、f12
4、然后我们刷新页面,network下就有很多的文件了
选择XHR,然后出现以下几条信息
点击其中一条,然后点击右侧的preview
我们可以看到里面有数据,不一定是第一条,我们查看里面的数据有没有我们要的信息
举个例子,其中的pageData,我们点击,然后发现previewer里面的数据很少,根本没有一条是我们需要的;所以肯定不是pageData这个文件
其实是第一条product
现在已经有眉目了,我们需要这个product文件的信息,点击Headers
从上面我们可以知道我们爬虫的地址是url = 'http://flights.ctrip.com/itinerary/api/12808/products'
这个请求是post请求;那么我们需要发送什么样的数据才会有这样的结果呢?
废话不多说,直接贴上代码
记住,不要频繁的爬取,会被网站设置填写校验码才能搜素的;然后你就会爬不出来任何东西;
如果你已经这样了,那么要么换一个无线网,要么换一个电脑,他们的Ip不一样就可以了;
我的表结构是这样的
因为我后续会对这个表进行处理,所以用了Django框架的表生成
from django.db import models
# Create your models here.
class airport(models.Model):
id = models.AutoField(primary_key=True) #是否设置为主键
fcity = models.CharField(max_length=32)#开始城市
tcity = models.CharField(max_length=32)#目的城市
date = models.CharField(max_length=32)#日期
airlineName = models.CharField(max_length=32)#航空公司
flightNumber = models.CharField(max_length=32)#航空公司编码
airportName = models.CharField(max_length=32)#机场名称
departureDate = models.CharField(max_length=32)#出发时间
arrivalDate = models.CharField(max_length=32)#结束时间
punctualityRate = models.CharField(max_length=32)#优惠率
jprice = models.CharField(max_length=32) #经济舱价格
fprice = models.CharField(max_length=32) # 公务舱价格
def __str__(