Python爬虫实战(9)Selenium+携程机票

利用selenium和BeautifulSoup库爬取携程的机票信息。比直接用request库请求的方式简单很多被禁的概率也低了很多。

运行平台: Windows
Python版本: Python 3.8
IDE: Pycharm

       基本思路:打开携程首页点击机票页,再输入城市和时间点击搜索,再在搜索的详情页把机票的详细信息爬取出来。

遇到的问题

时间输入后无法搜索

       问题:在输入出发城市和到达城市后,把时间也输入后无法点击搜索按键。
       解决方法:先输入时间再输入城市就可以点击搜索按键。

 	# 选择日期
    inputTag = driver.find_element_by_id('FD_StartDate')
    inputTag.send_keys('2020-01-01')
    time.sleep(1)
    # 选择出发城市
    inputTag = driver.find_element_by_id('FD_StartCity')
    inputTag.send_keys('北京')
    time.sleep(1)
    # 选择到达城市
    inputTag = driver.find_element_by_id('FD_DestCity')
    inputTag.send_keys('上海')

机票信息不完全

       问题:在一开始爬虫的网页中发现,直接爬取的机票信息并不全,会漏掉下面的几条航班信息。后来发现携程使用了滚动加载,即一开始不会加载完成全部信息只有当滚动条到下面才会下面后面的信息
       解决方法:用selenium模拟一个滚动条向下滚动的动作。range(5)是让网页下拉5次的意思,因为我还没找到更好的解决办法只有多模拟下拉几次要是不够的话,可以将range内的值改大。要是后续有更好的改进方法我会贴在后面

    # 模拟下拉,针对懒加载
    for i in range(5):
    	driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)

代码

# 利用selenium爬取携程
import time
from selenium import webdriver
from bs4 import BeautifulSoup


def main():
    driver_path = r'E:\PythonProject\Spider\chromedriver.exe'
    driver = webdriver.Chrome(executable_path=driver_path)

    driver.get('https://www.ctrip.com/')
    time.sleep(1)
    # 从首页选择进入机票页面
    inputTag = driver.find_element_by_class_name('s_tab_nocurrent')
    inputTag.click()
    time.sleep(2)
    # 选择日期
    inputTag = driver.find_element_by_id('FD_StartDate')
    inputTag.send_keys('2020-01-01')
    time.sleep(1)
    # 选择出发城市
    inputTag = driver.find_element_by_id('FD_StartCity')
    inputTag.send_keys('重庆')
    time.sleep(1)
    # 选择到达城市
    inputTag = driver.find_element_by_id('FD_DestCity')
    inputTag.send_keys('上海')
    time.sleep(1)
    # 开始搜索
    inputTag = driver.find_element_by_id('FD_StartSearch')
    inputTag.click()
    time.sleep(1)
    # 模拟下拉,针对懒加载
    for i in r
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值