夏日旅行攻略:使用爬虫程序+代理IP获取最佳旅游优惠

2023-06-27 16:48:32 浏览数 (2)

亿牛云代理亿牛云代理

如果你计划进行夏日旅行,并且希望寻找最佳旅游优惠、酒店信息和景点推荐,那么你可能需要使用爬虫程序 代理IP从不同网站收集数据。爬虫程序 代理IP可以匿名访问网页并提取相应的信息。

其中一个例子是使用C# .NET和Selenium开发的程序,Selenium是一个用于自动化浏览器的框架。该程序可以爬取像www.qunar.com、www.Booking.com和www.ctrip.com这样的网站,这些网站是预订航班、酒店和旅游的热门平台。通过使用该程序,你可以比较各种旅游选择的价格、评级、评论和可用性,从而做出明智的夏日旅行决策。

下面用示例说明如何快速实现:

代码语言:c#复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using OfficeOpenXml;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace ProxyIPCrawler
{
    class Program
    {
        static void Main(string[] args)
        {
            // 亿牛云代理 爬虫代理加强版
            // 设置爬虫代理IP的主机、端口、用户名和密码
            string proxyHost = "www.16yun.cn";
            string proxyPort = "8080";
            string proxyUser = "16YUN";
            string proxyPass = "16IP";

            // 设置Chrome选项,开启无头模式,设置UserAgent
            ChromeOptions options = new ChromeOptions();
            options.AddArgument("--headless");
            options.AddArgument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36");

            // 设置代理服务器
            Proxy proxy = new Proxy();
            proxy.HttpProxy = $"{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}";
            proxy.SslProxy = $"{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}";
            options.Proxy = proxy;

            // 创建Chrome驱动
            IWebDriver driver = new ChromeDriver(options);

            // 定义三个网站的URL和酒店名称
            string qunarUrl = "https://www.qunar.com/";
            string bookingUrl = "https://www.booking.com/";
            string ctripUrl = "https://www.ctrip.com/";
            string hotelName = "希尔顿酒店";

            // 定义一个列表,用于存储采集到的数据
            List<HotelInfo> hotelInfos = new List<HotelInfo>();

            // 采集去哪儿网的数据
            driver.Navigate().GoToUrl(qunarUrl);
            driver.FindElement(By.Id("toCity")).SendKeys(hotelName);
            driver.FindElement(By.Id("searchHotelButton")).Click();
            
            // 等待页面加载完成
            System.Threading.Thread.Sleep(5000);

            // 获取酒店的价格信息
            var qunarHotels = driver.FindElements(By.ClassName("item_hotel_info"));
            
            foreach (var qunarHotel in qunarHotels)
            {
                if (qunarHotel.FindElement(By.ClassName("hotel_item_tit")).Text.Contains(hotelName))
                {
                    HotelInfo hotelInfo = new HotelInfo();
                    hotelInfo.Website = "www.qunar.com";
                    hotelInfo.Hotel = qunarHotel.FindElement(By.ClassName("hotel_item_tit")).Text;
                    hotelInfo.Price = Convert.ToDouble(qunarHotel.FindElement(By.ClassName("item_price")).Text.Replace("¥", ""));
                    hotelInfos.Add(hotelInfo);
                    break;
                }
                
            }

            // 采集Booking.com的数据
            driver.Navigate().GoToUrl(bookingUrl);
            
            // 等待页面加载完成
            System.Threading.Thread.Sleep(5000);

            driver.FindElement(By.Id("ss")).SendKeys(hotelName);
            
             // 点击搜索按钮
             driver.FindElement(By.ClassName("sb-searchbox__button")).Click();

             // 等待页面加载完成
             System.Threading.Thread.Sleep(5000);

             // 获取酒店的价格信息
             var bookingHotels = driver.FindElements(By.ClassName("sr_item"));

             foreach (var bookingHotel in bookingHotels)
             {
                 if (bookingHotel.FindElement(By.ClassName("sr-hotel__name")).Text.Contains(hotelName))
                 {
                     HotelInfo hotelInfo = new HotelInfo();
                     hotelInfo.Website = "www.booking.com";
                     hotelInfo.Hotel = bookingHotel.FindElement(By.ClassName("sr-hotel__name")).Text;
                     hotelInfo.Price = Convert.ToDouble(bookingHotel.FindElement(By.ClassName("bui-price-display__value")).Text.Replace("$", ""));
                     hotelInfos.Add(hotelInfo);
                     break;
                 }

             }

             // 采集携程网的数据
             driver.Navigate().GoToUrl(ctripUrl);

             // 等待页面加载完成
             System.Threading.Thread.Sleep(5000);

             driver.FindElement(By.Id("HD_CityName")).SendKeys(Keys.Control   "a");
             driver.FindElement(By.Id("HD_CityName")).SendKeys(Keys.Delete);
             driver.FindElement(By.Id("HD_CityName")).SendKeys("San Jose");
             
             // 点击搜索按钮
             driver.FindElement(By.Id("HD_Btn")).Click();

             // 等待页面加载完成
             System.Threading.Thread.Sleep(5000);

             driver.FindElement(By.Id("txtKeyword")).SendKeys(hotelName);

             // 点击搜索按钮
             driver.FindElement(By.Id("btnSearch")).Click();

             // 等待页面加载完成
             System.Threading.Thread.Sleep(5000);

             // 获取酒店的价格信息
             var ctripHotels = driver.FindElements(By.ClassName("hotel_new_list"));

             foreach (var ctripHotel in ctripHotels)
             {
                 if (ctripHotel.FindElement(By.ClassName("hotel_item_name")).Text.Contains(hotelName))
                 {
                     HotelInfo hotelInfo = new HotelInfo();
                     hotelInfo.Website = "www.ctrip.com";
                     hotelInfo.Hotel = ctripHotel.FindElement(By.ClassName("hotel_item_name")).Text;
                     hotelInfo.Price = Convert.ToDouble(ctripHotel.FindElement(By.ClassName("J_price_lowList")).Text.Replace("$", ""));
                     hotelInfos.Add(hotelInfo);
                     break;
                 }

             }

             // 关闭驱动
             driver.Quit();

             // 按照价格从高到低排序
             hotelInfos = hotelInfos.OrderByDescending(h => h.Price).ToList();

             // 创建Excel文件
             string fileName = "HotelPrices.xlsx";
             FileInfo file = new FileInfo(fileName);

             // 创建Excel工作簿
             using (ExcelPackage package = new ExcelPackage(file))
             {
                 // 创建Excel工作表
                 ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");

                 // 设置表头
                 worksheet.Cells[1, 1].Value = "网站";
                 worksheet.Cells[1, 2].Value = "酒店";
                 worksheet.Cells[1, 3].Value = "价格";

                 // 填充数据
                 for (int i = 0; i < hotelInfos.Count; i  )
                 {
                     worksheet.Cells[i   2, 1].Value = hotelInfos[i].Website;
                     worksheet.Cells[i   2, 2].Value = hotelInfos[i].Hotel;
                     worksheet.Cells[i   2, 3].Value = hotelInfos[i].Price;
                 }

                 // 保存文件
                 package.Save();
             }

             Console.WriteLine("采集完成,数据已导入{0}", fileName);
        }
    }

    // 定义一个类,用于存储酒店信息
    class HotelInfo
    {
        public string Website { get; set; }
        public string Hotel { get; set; }
        public double Price { get; set; }
    }
}

这段代码主要功能如下:

  1. 使用ChromeOptions配置Chrome浏览器,开启无头模式并设置UserAgent。
  2. 定义三个网站(www.qunar.com、www.booking.com和www.ctrip.com)的URL和指定酒店的名称。
  3. 创建一个列表来存储采集到的酒店信息。
  4. 采集网站的数据,搜索指定酒店并获取价格信息。
  5. 将酒店信息按照价格从高到低排序。
  6. 创建一个Excel文件,并将酒店信息导入到文件中。

代码中的HotelInfo类用于存储酒店信息,包括网站、酒店名称和价格。

0 人点赞