python爬取去哪儿出境游攻略

2023-03-27 16:15:04 浏览数 (1)

近期,关于热门旅游目的地泰国的旅游安全问题受到热议,好在官网已经针对这些假新闻进行了辟谣,一些旅行社表示经过这次泰国游安全问题热议虽然暂未收到退订单的情况,但预订量有所减少。相关的不实言论容易对旅游情绪产生极大的负面影响。

事实上,截至目前泰国游仍是国内出境游最受欢迎的目的地国家之一,无论在各在线旅游平台上的搜索热度还是预订量均位居前列。马蜂窝大数据显示,近一周马蜂窝站内“五一出境游”相关热度上涨超过110%,泰国、马来西亚、印度尼西亚、日本、西班牙位居目前五一假期订单量最高的境外目的地前五。

我想很多人处境游之前肯定会做很多的攻略,但是网上攻略太多了看得头皮发麻,但是仔细看的话每条旅游攻略都有特定的参数条件的,比如人数、价钱、游玩时间,也就是说我们可以通过筛选这些条件初步获取我们满意的攻略。要实现这样让人满意的攻略唯有python爬虫,所以这里我们就通过使用python爬取去哪儿有关出国游的各种攻略来制定自己的一份满意的出游路线。

爬取数据过程中最重要的就是解决反爬机制的问题,一般网站都是从3个方面进行反爬限制,用户请求的Headers、 用户行为、 网站目录和数据加载方式,其中比较常见的就是基于用户行为的反爬,特别是同一IP短时间内多次访问的限制,对于这种情况直接使用爬虫代理IP就可以解决。

代理IP的获取也是很简单的事,网上有免费和付费的,但是质量都层次不齐。如果是企业里需要的话,建议直接购买优质代理,不仅代理质量有保证,售后也是有保证的吗。代理在爬虫程序里面的实现方法这里可以分享下:

代码语言:javascript复制
// 要访问的目标页面
string targetUrl = "https://www.qunar.com/";


// 代理服务器(产品官网 www.16yun.cn)
string proxyHost = "http://t.16yun.cn";
string proxyPort = "31111";

// 代理验证信息
string proxyUser = "16ZWCETA";
string proxyPass = "852746";

// 设置代理服务器
WebProxy proxy = new WebProxy(string.Format("{0}:{1}", proxyHost, proxyPort), true);


ServicePointManager.Expect100Continue = false;

var request = WebRequest.Create(targetUrl) as HttpWebRequest;

request.AllowAutoRedirect = true;
request.KeepAlive = true;
request.Method    = "GET";
request.Proxy     = proxy;

//request.Proxy.Credentials = CredentialCache.DefaultCredentials;

request.Proxy.Credentials = new System.Net.NetworkCredential(proxyUser, proxyPass);

// 设置Proxy Tunnel
// Random ran=new Random();
// int tunnel =ran.Next(1,10000);
// request.Headers.Add("Proxy-Tunnel", String.valueOf(tunnel));


//request.Timeout = 20000;
//request.ServicePoint.ConnectionLimit = 512;
//request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36";
//request.Headers.Add("Cache-Control", "max-age=0");
//request.Headers.Add("DNT", "1");


//String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(proxyUser   ":"   proxyPass));
//request.Headers.Add("Proxy-Authorization", "Basic "   encoded);

using (var response = request.GetResponse() as HttpWebResponse)
using (var sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
    string htmlStr = sr.ReadToEnd();
}

0 人点赞