如果你计划进行夏日旅行,并且希望寻找最佳旅游优惠、酒店信息和景点推荐,那么你可能需要使用爬虫程序 代理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; }
}
}
这段代码主要功能如下:
- 使用ChromeOptions配置Chrome浏览器,开启无头模式并设置UserAgent。
- 定义三个网站(www.qunar.com、www.booking.com和www.ctrip.com)的URL和指定酒店的名称。
- 创建一个列表来存储采集到的酒店信息。
- 采集网站的数据,搜索指定酒店并获取价格信息。
- 将酒店信息按照价格从高到低排序。
- 创建一个Excel文件,并将酒店信息导入到文件中。
代码中的HotelInfo
类用于存储酒店信息,包括网站、酒店名称和价格。