python爬虫之获取携程网所有航班机票信息,与携程网共同变化的爬虫博客

我们看一下效果

 

我实现的功能是

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__(
  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要爬取程网机票信息,可以按照以下步骤进行: 1. 使用 Python 的 requests 库向程网发送 HTTP 请求,获取机票页面的 HTML 内容。 2. 使用 BeautifulSoup 库对 HTML 内容进行解析,提取出机票信息所在的标签。 3. 解析标签,获取机票的相关信息,如出发地、目的地、航班号、价格、起飞时间、到达时间等。 4. 将获取机票信息存储到数据库或文件中。 下面是一个简单的示例代码: ```python import requests from bs4 import BeautifulSoup # 构造请求头部信息 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 构造请求参数信息 params = { 'depCity': '北京', 'arrCity': '上海', 'depDate': '2022-01-01', } # 发送 HTTP 请求,获取机票页面的 HTML 内容 response = requests.get('https://flights.ctrip.com/domestic/search/flight', headers=headers, params=params) html_content = response.text # 使用 BeautifulSoup 解析 HTML 内容,提取机票信息 soup = BeautifulSoup(html_content, 'html.parser') flight_list = soup.select('.flight-item') # 遍历机票列表,输出机票信息 for flight in flight_list: flight_no = flight.select_one('.flight_logo').text.strip() # 航班号 dep_time = flight.select_one('.time').text.strip() # 起飞时间 arr_time = flight.select('.time')[-1].text.strip() # 到达时间 price = flight.select_one('.base_price02').text.strip() # 价格 print(flight_no, dep_time, arr_time, price) ``` 需要注意的是,程网有反爬机制,可能会对频繁的请求进行限制或者要求验证码验证,因此在实际应用中需要添加相应的反反爬措施。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值