python用Selenium爬取携程网机票信息

2023-05-16

一、问题说明

1、selenium库是爬虫过程中比较讨巧的一个第三方库,它能够跳过js、ajax等交互,上手比较容易。

2、基础代码是根据其他博主参考而来,但携程网站不断变化,除ID等不变的信息外,其余都已发生变化,因此,仔细对比之后,改进并编写了以下代码,发布于2021年10月19日。

3、如果出现报错,请尝试修改下面代码中 time.sleep()函数参数。

4、要爬取自己想要的数据,只需修改出发地和到达地以及出发时间,另外注意修改浏览器驱动,本人用的是MicroSoft Edge,驱动到对应的网站下载,下载后要更名驱动并修改 driver_path参数。

4、目前只是一个基础版本,后续可能会发布更新版,如加入直飞、中转、经停等个性化数据爬取。

5、代码只供学习参考,请勿商用!

二、代码

# -*- coding:utf-8 -*-
# 利用selenium爬取携程
# Author: KingStar
import time
from selenium import webdriver
from bs4 import BeautifulSoup

def page_select_function(driver_path):
    driver = webdriver.Edge(executable_path=driver_path)
    driver.get('https://www.ctrip.com/')
    time.sleep(1)
    # 窗口最大化
    driver.maximize_window()
    # 从首页选择进入机票页面
    input_tag_slect = driver.find_element_by_class_name('s_tab_nocurrent')
    input_tag_slect.click()
    time.sleep(1)
    # 选择日期
    input_tag_time = driver.find_element_by_id('FD_StartDate')
    input_tag_time.send_keys('2021-10-20')
    time.sleep(1)
    # 选择出发城市
    input_tag_depart_city = driver.find_element_by_id('FD_StartCity')
    input_tag_depart_city.send_keys('厦门')
    time.sleep(1)
    # 选择到达城市
    input_tag_arrive_city = driver.find_element_by_id('FD_DestCity')
    input_tag_arrive_city.send_keys('兰州')
    time.sleep(1)
    # 开始搜索
    input_tag_search = driver.find_element_by_id('FD_StartSearch')
    # driver.find_element(By.CSS_SELECTOR, "#submit").send_keys(Keys.ENTER)
    driver.execute_script("arguments[0].click();", input_tag_search)
    # input_tag_search.click()
    time.sleep(3)
    # 关闭紧急公告提示
    tag_close = driver.find_element_by_class_name('close-icon')
    tag_close.click()
    time.sleep(1)
    # 只选择经停
    tag_select = driver.find_element_by_class_name('auto_cursor')
    tag_select.click()
    time.sleep(2)
    driver.find_element_by_xpath('//*[@id="domestic_filter_group_trans_and_train__trans_count"]/li[2]/span').click()
    driver.find_element_by_class_name('flight-part').click()
    time.sleep(1)
    '''
    # 只选择直飞
    direct_flight_tag_click = driver.find_element_by_class_name('form-label')
    direct_flight_tag_click.click()
    time.sleep(2)
    '''
    for i in range(1):
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(1)
    return driver

def data_acquistion(driver):
    source = driver.page_source
    bs = BeautifulSoup(source, 'html.parser')
    divs = bs.find_all('div', class_='flight-item domestic')
    return divs

def data_treating(divs):
    for div in divs:
        try:
            airlineName = div.find('div', class_='airline-name').get_text()
            flightNumber = div.find_all('span', class_='plane-No')[0].get_text()
            # craftTypeName = div.find('span', class_='direction_black_border low_text').string
            departureTime = div.find('div', class_='depart-box').find('div', class_='time').string
            arrivalTime = div.find('div', class_='arrive-box').find('div', class_='time').get_text()
            lowestPrice = div.find('span', class_='price').get_text()
            print(airlineName, '\t', flightNumber, '\t', departureTime, '\t', arrivalTime, '\t', lowestPrice)
            time.sleep(1)
        except:
            print(无该信息)

def main():
    driver_path = r'C:\MicrosoftWebDriver.exe'
    driver = page_select_function(driver_path)
    divs = data_acquistion(driver)
    data_treating(divs)
    driver.close()

if __name__ == '__main__':
    main()



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python用Selenium爬取携程网机票信息 的相关文章

  • 【Python】Windows系统下Spyder安装python第三方包的两种方法

    小白在学习python之初 xff0c 经常遇到要安装python第三方包的问题 xff0c 犹记得在安装xgboost时 xff0c 那是安装了一下午呀 xff0c 各种网上找教程 xff0c 后来小白总结了一下 xff0c 其实安装包无
  • 关于棋盘马走“日”字问题的回溯算法实现(分享以前做过的题)

    1 回溯法基本思想 回溯法是在包含问题的所有解得解空间树 或森林 中 xff0c 按照深度优先的策略 xff0c 从根结点出发搜索解空间树 算法搜索至解空间树的任一结点时 xff0c 总是先判断该结点是否满足问题的约束条件 如果满足进入该子
  • springboot中使用logback将日志写入到ELK平台

    ELK 是由elasticsearch logstash kibana 三个单词的首字母组成 elasticsearch xff1a 一款优秀的开源分布式搜索引擎框架 基于lucence logstash xff1a 开源的日志分析 过滤
  • xxl-job的http任务和command任务

    在官方提供的sample示例代码中 xff0c 还提供了两种特殊的bean类型的任务 http bean的名称为 xff1a httpJobHandler 和command xff08 bean的名称为 xff1a commandJobHa
  • activiti中的服务任务(ServiceTask)

    服务任务不同于用户任务 xff08 需人工处理 xff09 xff0c 服务任务一般是一段可自动执行的任务而无需人工干预 例如 xff1a 当用户完成 34 任务1 34 后 xff0c 想自动执行一个跑批任务处理后台数据库表的数据 xff
  • springcloud集成seata(AT)分布式事务

    目录 一 下载seata server和seata源码 二 配置启动seata 2 1 在nacos控制台 xff0c 新建一个seata的名称空间 xff0c 用于存放seata的专用配置 2 2 创建seata server的mysql
  • mybatis中插入和读取mysql的blob/text类型数据

    mysql中的blob xff0c mediumblob xff0c longblob 可以映射到mybatis中 的byte 类型 xff0c 需要mybatis的org apache ibatis type BlobTypeHandle
  • you-get使用二三谈 (亲测感想 )

    1 you get是什么 you get是Github上的一个项目 xff0c 源项目托管地址对其介绍如下 xff1a You Get is a tiny command line utility to download media con
  • typescript(四)--ts中类、对象、静态方法、继承

    如题 xff0c 本篇介绍下ts中类 对象 静态方法 继承 类中成员返回修饰符等 ts中类继承类似于传统面向对象编程语言中的继承体系 xff0c 使用extends关键字继承 xff0c 类中this表示此当前对象本身 xff0c supe
  • typescript(五)--ts中抽象类、继承、多态

    如题 xff0c 本篇我们介绍下ts中抽象类 继承 多态 ts中类抽象类 多态 xff1a 抽象类 abstract 修饰 xff0c 里面可以没有抽象方法 但有抽象方法 abstract method 的类必须声明为抽象类 abstrac
  • typescript(九)--ts中泛型、泛型方法、泛型类、泛型接口

    如题 xff0c 本篇我们介绍写ts中的泛型 什么是泛型呢 xff1f 我们可以理解为泛型就是在编译期间不确定方法的类型 广泛之意思 xff0c 在方法调用时 xff0c 由程序员指定泛型具体指向什么类型 泛型在传统面向对象编程语言中是极为
  • springboot中spring.profiles.include的妙用

    springboot中spring profiles include的妙用 我们有这样的一个springboot项目 项目分为开发 测试 生产三个不同阶段 环境 xff0c 每个阶段都会有db ftp redis等的不同配置信息 我们可以使
  • “联通”两字在windows平台下的乱码问题

    windows 平台下 xff1a 新建文本文档 输入 39 联通 39 ctrl 43 s保存 gt 退出记事本 再双击打开该文本 神奇的事情发生了 联通两个字变成黑点 xff01 原因 xff1a 保存和打开的时候没有指定统一的编码解码
  • Ant Design table 自动对齐表头

    在table的属性中加入 xff1a scroll 61 34 x 39 max content 39 34 即可不用设置列宽度 xff0c 自适应全表内容为一行显示 xff0c 自动对齐表头
  • Python pip 源设置成国内源,阿里云源,清华大学源,最方便的方式,都在这里了

    文章目录 背景代码替换设置阿里源 推荐这个 设置清华大学的 手动替换windows 替换Mac 替换 国内源列表 xff08 推荐用阿里云的 xff09 推荐阅读 背景 由于 python 自带的源下载速度非常慢 xff0c 特别是安装一些
  • Linux 休眠和挂起

    Linux休眠和挂起 xff08 2008新版 xff09 Linux2 6内核已经有了非常多的变化 xff0c 配置也要相应的改变 The only thing that not changes is Change xff1a xff09
  • 使用dpkg命令安装deb文件包

    1 使用dpkg命令进行安装 sudo dpkg i deb文件名 2 根据经验 xff0c 通常情况下会报依赖关系的错误 xff0c 我们可以使用以下的命令修复安装 sudo apt get install f 3 如果要卸载安装的应用我
  • UITableViewController (列表视图控制器)

    tableview里Cell的小对勾颜色改成别的颜色 xff1f mTableView tintColor 61 UIColor redColor 怎么在不新建一个Cell的情况下调整separaLine的位置 xff1f 一 myTabl
  • Python零代码小游戏 · FreeGames

    Python在日常的办公或者其他领域都有涉及 xff0c 如网站开发 数据分析 爬虫 可视化等等 我们其实还可以选择用Python开发小游戏 xff0c 回忆童年的美好时光 这次并非用PyGame制作的 xff0c 而是一个很有趣的库 Fr
  • Linux 系统使用 git 提交代码-- git 的安装及使用(简明教学指南)

    序 2023 02 09 晚 鉴于本篇文章收藏量比较多 xff0c 那就给大家分享点在实际工作中使用频率最高的工作流命令吧 场景如下 多人共同开发一个项目 xff1a 我叫小明 xff0c 参与了一个名为 chatGPT 的项目 xff0c

随机推荐

  • pyperclip 粘贴失效

    最近在pyautogui自动化输入时 xff0c 发现英文数字都可以 xff0c 中文比较麻烦 xff0c 而且还牵扯到输入法切换问题 xff0c pyautogui typewrite 这是相当于键盘输入 xff0c 如果现在是中文 xf
  • mac 安装问题汇总

    1 问题 xff1a 应用程序添加到登陆项后需要输入密码 xff0c 怎么才能不让它提示输入密码 xff0c 直接运行 xff1f 回答 xff1a 终端内输入 sudo s 输入密码 chown root Applications Gen
  • 如何在Java中加密和解密zip文件?

    在本文中 xff0c 我们来学习如何用Zip4j库创建受密码保护的压缩文件并将其解压 依赖 让我们先把 zip4j 依赖关系添加到我们的 pom xml 文件中 lt dependency gt lt groupId gt net ling
  • Alibaba技术大牛丢给我一份Spring Cloud笔记,在GitHub的热度居然高达81.6k标星,太强了!

    前言 阿里巴巴 xff0c 作为国内互联网公司的Top xff0c 算是业界的标杆 xff0c 有阿里背景的程序员 xff0c 也更具有权威性 作为程序员 xff0c 都清楚阿里对于员工要求有多高 xff0c 技术人员掌握的技术水平更是望尘
  • VNC安装教程

    服务器远程访问工具 xff0c 图形化界面 xff0c VNC安装 需要先在服务器安装sever xff0c 然后在本地安装客户端进行访问 一 首先在服务器安装vncserver span class token comment 以root
  • Debian11安装Docker稳定版

    1 安装依赖包 apt get update amp amp apt get install ca certificates curl gnupg lsb release apt transport https software prope
  • 程序员成神之路,一年挖坑,五年扛旗,十年成神

    自人类社会诞生以来 xff0c 等级就一直存在 xff0c 有人指点江山 xff0c 称之为 大神 有人卸瓦搬砖 xff0c 称之为 小白 在程序员的世界里 xff0c 等级同样森严 特别是在1年 5年 10年时会有大不同 据说到达上面每一
  • [安装fastfds中的nginx执行make命令报错]src/core/ngx_murmurhash.c:37:11: error

    问题 在nginx文件夹里执行make命令报错 src core ngx murmurhash c 37 11 error this statement may fall through Werror 61 implicit fallthr
  • 七牛云融合CDN到底怎么配置?

    人生如戏 xff0c 你得先有故事 老李 由于来年头一个月公司产品接入了一个旅游项目 xff0c 为了保证系统的稳定性 xff0c 必须要对现有架构进行改进以应对大流量的冲击 那么问题来了 xff1f 怎么改 xff1f 首先 xff0c
  • 【二、Arm平台直接安装QT】

    在目标开发平台空间资源不紧张的情况下 xff0c 可直接安装QT常规库 xff0c 省去交叉编译QT源码的时间 span class token function sudo span span class token function ap
  • ubuntu sudo apt-get update时执行失败应该怎么办

    命中 1 http security ubuntu com ubuntu focal security InRelease 命中 2 http us archive ubuntu com ubuntu focal InRelease 命中
  • 不吹不黑,逛GitHub没看过这10个开源项目,绝对血亏

    今天的分享 xff0c 也算是一次简单的复盘 xff0c 我们花了点时间梳理了一下 xff0c 以便诸位在空余时间可以研究学习 下面开始进入正题 xff1a 1 Build Your Own X GitHub Star xff1a 61 3
  • 快速精准的人头检测,代码已开源

    昨天arXiv一篇新上论文 FCHD A fast and accurate head detector xff0c 来自江森自控 xff08 Johnson Controls Inc xff09 的软件工程师Aditya Vora分享了一
  • UDP 用户数据报协议

    UDP 用户数据报协议 引言 UDP是一种保留消息边界 xff08 不合并 xff0c 不拆分 xff09 的简单的面向数据报的传输层协议 使用UDP协议的时候 xff0c 一般来说 xff0c 每个被应用程序请求的UDP输出操作只生产一个
  • 有新家了

    我在CSDN有个小窝了 我是一个JAVA初学者 虽然不是从事IT业 但对计算机有着浓厚的兴趣 希望在CSDN这个大家庭里 能得到朋友们的帮助 当然 我也会力所能及的帮助其它初学者解决一些简单问题的 以后我会把每天学习的内容 来这里发表一下
  • 动态绑定和多态

    class Animal private String name Animal String name this name 61 name public void enjoy System out println 34 叫声 34 clas
  • 离线安装gitlab

    1 下载跟Linux版本相关的 rpm包 地址 xff1a https packages gitlab com gitlab gitlab ce 2 将下载的rpm包上传到机器 3 解压 rpm ivh gitlab ce 15 6 2 c
  • windows子系统 WSL 的根目录位置

    根目录对应位置 我安装的子系统是 Ubuntu18 04 xff0c 根目录对应的位置是 xff1a C Users Administrator AppData Local Packages CanonicalGroupLimited Ub
  • 2020阿里云学生服务器操作步骤!

    前言 年龄在12岁 24岁之间的大陆个人实名认证用户 和 大陆全日制在校大学生在学生认证有效期内 xff0c 满足上述任一条件即可享受优惠价格 xff0c 同一用户只能保有一台学生优惠弹性计算产品 xff0c 一台数据库RDS产品 xff0
  • python用Selenium爬取携程网机票信息

    一 问题说明 1 selenium库是爬虫过程中比较讨巧的一个第三方库 xff0c 它能够跳过js ajax等交互 xff0c 上手比较容易 2 基础代码是根据其他博主参考而来 xff0c 但携程网站不断变化 xff0c 除ID等不变的信息