基于selenium写一个可以可视化的机票爬取脚本

        马上快到暑假了,想不想监视最实惠,最便宜的机票呢?对于我这个囊中羞涩的学生党来说肯定是的,所以今天突发奇想写了一小部分爬取携程机票的脚本。后续可以接入同程旅行,飞猪等平台的监视模块。有待更新

 一,准备安装需要的包

from selenium.webdriver.edge.options import Options
from bs4 import BeautifulSoup
from selenium import webdriver
import time

可以使用pip指令安装,本人是用pycharm终端的pip指令安装的。

pip install selenium
pip install beautifulsoup4
#time是python内置库,所以不需要安装

二,分析网页

这里的url分析以长春到贵阳机票查询预订-长春飞贵阳特价机票价格-携程飞机票 (ctrip.com)为例

https://flights.ctrip.com/online/list/oneway-cgq-kwe?depdate=2024-06-09&cabin=y_s_c_f&adult=1&child=0&infant=0
#其中可以看到cgq和kwe分别代表地区的一个编号,2024-06-09则是代表日期,所以我们可以通过改变日期来进入不同页面。

通过查看请求发现在请求里抓不到包,(我之前记得我好像用请求获取信息过一次,不知道为什么找不到了,可能记错了,也有可能是我菜)所以我选择用selenium。

三,获取源代码

def get_data(date):
    options = Options()
    options.add_argument("--headless")
    driver = webdriver.Chrome(options=options)
    # 打开目标网页
    driver.get(f'https://flights.ctrip.com/online/list/oneway-cgq-kwe?_=1&depdate={date}&cabin=Y_S_C_F&containstax=1')
    # 等待页面加载完成
    time.sleep(2)  # 根据需要调整等待时间
    # 获取页面高度
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        # 模拟用户滚动页面
        driver.execute_script("window.scrollBy(0, 600);")  # 每次向下滚动 1000 像素
        # 等待加载新内容
        time.sleep(5)  # 根据需要调整等待时间
        # 计算新的页面高度并与之前的页面高度进行比较
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height
    # 获取加载后的页面源代码
    page_source = driver.page_source
    return page_source

这里模拟了一下用户下拉页面加载网页前端代码。所以整体速度就没有请求那种速度。 

四,分析网页,获取对应信息。

  这里大家可以通过浏览器的F12的开发者工具来分析html结构,去获取对应的标签信息

for i in text_data:
    price = i.find_all("span", class_="price", id="travelPackage_price_undefined")
    for i in perice:
            print("价格:"+i.text)
#获取价格

 五,整合代码

from selenium.webdriver.edge.options import Options
from bs4 import BeautifulSoup
from selenium import webdriver
import time

def get_data(date,begin,end):         
    options = Options()
    options.add_argument("--headless")
    driver = webdriver.Chrome(options=options)   #隐藏标头
    # 打开目标网页
    driver.get(f'https://flights.ctrip.com/online/list/oneway-{begin}-{end}?_=1&depdate={date}&cabin=Y_S_C_F&containstax=1')
    # 等待页面加载完成
    time.sleep(2)  # 根据需要调整等待时间
    # 获取页面高度
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        # 模拟用户滚动页面
        driver.execute_script("window.scrollBy(0, 600);")  # 每次向下滚动 1000 像素
        # 等待加载新内容
        time.sleep(5)  # 根据需要调整等待时间
        # 计算新的页面高度并与之前的页面高度进行比较
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height
    # 获取加载后的页面源代码
    page_source = driver.page_source
    return page_source

data=get_data("2024-06-25",CGQ,KWE) 
data1=BeautifulSoup(data,"html.parser")
try:
    for n in range(0,15):
        text_data=data1.find_all("div",attrs={'index':{n}})
        id = text_data[0].find_all("div", class_="flight-airline")
        for i in id:
            print(i.text)
        time=text_data[0].find_all("div",class_="depart-box")
        for i in time:
            print("起飞:"+i.text)
        time_end=text_data[0].find_all("div",class_="arrive-box")
        for i in time_end:
            print("到达:"+i.text)
        perice=text_data[0].find_all("span",class_="price",id="travelPackage_price_undefined")
        for i in perice:
            print("价格:"+i.text)
        print("--------------------------------------------------------------------------------------------------------------")
except:
    print("error")

    城市的编号可以去查 ,(下次更新我可以用他的编号在代码中用字典来储存,这样能方便很多。)

 

六,结果展示

 

后面可以通过爬到的数据做可视化分析,也可以增加多个平台的线程爬虫来进行平台价格比对。都可以做扩展,在日期中加上for循环,可以获取一个月内的机票价格等。 

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值