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

亿牛云代理

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

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

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

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; }

    }

}

这段代码主要功能如下:

使用ChromeOptions配置Chrome浏览器,开启无头模式并设置UserAgent。

定义三个网站(www.qunar.com、www.booking.com和www.ctrip.com)的URL和指定酒店的名称。

创建一个列表来存储采集到的酒店信息。

采集网站的数据,搜索指定酒店并获取价格信息。

将酒店信息按照价格从高到低排序。

创建一个Excel文件,并将酒店信息导入到文件中。

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • UI自动化的价值 回归测试 兼容性测试 自动化测试工具选型 使用selenium的优势主要是:开源免费、跨语言、跨...
    DayBreakL阅读 1,640评论 2 1
  • 一、环境搭建 官网需要下载selenium对应的jar包,谷歌浏览器及对应的驱动 官网下载地址:http://ww...
    yertao阅读 1,698评论 0 0
  • 微信公众号-IT赶路人,专注分享与IT相关知识,关注我,一起升职加薪! 下面的Java Selenium问题指南涵...
    IT赶路人阅读 1,051评论 0 1
  • 元素的定位 Selenium 自动化,我们需要做的最基本的事情就是在页面找到元素并通过脚本程 序去操作这个元素,实...
    nayli阅读 893评论 1 9
  • 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以...
    涛b阅读 764评论 0 1