“五一”出游堪比春运

简介: python如何爬取马蜂窝数据

最近2天“五一”假期火车票正式开售,作为春节以来第一个真正意义上的小长假,“五一”旅游市场火爆程度受到市场密切关注。根据多家在线旅游平台数据显示,“五一”火车票“卖爆了”。
“五一”抢火车票堪比春运,多条热门线路火车票秒空,旅游订单同比增长超2000%,值得一提的是,近期凭借烧烤出圈的淄博在“五一”假期期间有望成为“顶流”。多个在线旅游平台“五一”期间高铁热门目的地榜单,淄博均位列前十。4月14日、15日两天,“淄博”火车票搜索增幅位居全国第一。不仅是火车票难抢,现在机票,景点门票,酒店预订都越来越难抢到了。现在已经成为了想去哪里玩而是哪里还可以去玩的地步了。
“五一”出游热城市,景点肯定是大家的首选,但是太热门的地方可能玩的不会很尽兴,因为都是人挤人。。作为网络索引擎组成之一。爬虫可以有效的帮助我们搜索和爬取有用的信息,减少很多的烦恼,比如这里我们可以通过python对马蜂窝数据的搜集和爬取整理出一份适合出游又很比较冷门的景点,这样可以给大家出游前有更多的选择。
直接用爬虫程序访问网站会返回521, 因为网站采用了js加密反爬. 其实就是一个js逆向问题, 我们看到的是521, 实际上是进行了三次访问. 每次访问需要带上上一次的cookie。不仅有js逆向网站还限制ip的多次访问,所以这里我们的解决办法就是爬虫程序加上优质代理ip并带上cookie一起去爬取。实现过程如下:

        import base64            
        import sys
        import random

        PY3 = sys.version_info[0] >= 3

        def base64ify(bytes_or_str):
            if PY3 and isinstance(bytes_or_str, str):
                input_bytes = bytes_or_str.encode('utf8')
            else:
                input_bytes = bytes_or_str

            output_bytes = base64.urlsafe_b64encode(input_bytes)
            if PY3:
                return output_bytes.decode('ascii')
            else:
                return output_bytes

        class ProxyMiddleware(object):                
            def process_request(self, request, spider):
                # 代理服务器(产品官网 www.16yun.cn)
                proxyHost = "t.16yun.cn"
                proxyPort = "31111"

                # 代理验证信息
                proxyUser = "16IFRWCZ"
                proxyPass = "254565"

                # [版本>=2.6.2](https://docs.scrapy.org/en/latest/news.html?highlight=2.6.2#scrapy-2-6-2-2022-07-25)无需添加验证头,会自动在请求头中设置Proxy-Authorization     
                request.meta['proxy'] = "http://{0}:{1}@{2}:{3}".format(proxyUser,proxyPass,proxyHost,proxyPort)

                # 版本<2.6.2 需要手动添加代理验证头
                # request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort)
                # request.headers['Proxy-Authorization'] = 'Basic ' +  base64ify(proxyUser + ":" + proxyPass)                    

                # 设置IP切换头(根据需求)
                # tunnel = random.randint(1,10000)
                # request.headers['Proxy-Tunnel'] = str(tunnel)

                # 每次访问后关闭TCP链接,强制每次访问切换IP
                request.header['Connection'] = "Close"
相关文章
|
网络协议 算法 架构师
一战,二战,再战,最后尘埃落定,缘定美团
一战,二战,再战,最后尘埃落定,缘定美团
185 0
一战,二战,再战,最后尘埃落定,缘定美团
|
编解码 人工智能 云计算
用球迷的方式,告诉你为什么这届世界杯不卡了
世界杯期间,什么事最痛苦? 如果有某件事比主队输球还要难受的话,那大概只有隔壁宿舍你的情敌疯狂大叫“进了进了进了”的时候,你的电脑上一个小圆圈在滚动……说真的兄弟,这种情况下还能忍,全校都敬你是条汉子。
2914 0
印度:失业率达24.7%,推2700亿美元纾困计划救小企业
5月12日,印度总理纳伦德拉·莫迪(Narendra Modi)宣布了一个针对劳工和小企业的20万亿卢比(2660亿美元)纾困计划。
|
安全 物联网 iOS开发
2020年春运火车票今天开售;果冻有家,关注年轻人租房子的隐藏需求
2020年春运火车票今天开售;果冻有家,关注年轻人租房子的隐藏需求
443 0