1. 首页
  2. Python

十一就要来了Python 爬取 13 个旅游城市,告诉你大家爱去哪玩?

“u003Cdivu003Eu003Cpu003E假期已经结束,小伙伴是不是都还没有玩过瘾?但是没办法,还有很多bug等着我们去写,同样还有需要money需要我们去赚。为了生活总的拼搏。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F930e1016111941cfae57475e05dd866d” img_width=”397″ img_height=”378″ alt=”十一就要来了Python 爬取 13 个旅游城市,告诉你大家爱去哪玩?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E今年放是三天假,很多人不再只是选择周边游,因为时间充裕,选择了稍微远一点的景区,甚至出国游。各个景点成了人山人海,拥挤的人群,甚至去卫生间都要排队半天,那一刻我突然有点理解灭霸的行为了。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F0d79fb8120f94169a6b0f454b553f940″ img_width=”333″ img_height=”266″ alt=”十一就要来了Python 爬取 13 个旅游城市,告诉你大家爱去哪玩?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E今天,通过分析去哪儿网部分城市门票售卖情况,简单的分析一下哪些景点比较受欢迎。等下次假期可以做个参考。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F9ca46a14cbe04b2b91aee631b789f925″ img_width=”1080″ img_height=”732″ alt=”十一就要来了Python 爬取 13 个旅游城市,告诉你大家爱去哪玩?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E通过请求https:u002Fu002Fpiao.qunar.comu002Fticketu002Flist.htm?keyword=北京,获取北京地区热门景区信息,再通过BeautifulSoup去分析提取出我们需要的信息。u003Cu002Fpu003Eu003Cpu003E这里为了偷懒只爬取了前4页的景点信息,每页有15个景点。因为去哪儿并没有什么反爬措施,所以直接请求就可以了。u003Cu002Fpu003Eu003Cpu003E这里只是随机选择了13个热门城市:北京, 上海, 成都, 三亚, 广州, 重庆, 深圳, 西安, 杭州, 厦门, 武汉, 大连, 苏州。u003Cu002Fpu003Eu003Cpu003E并将爬取的数据存到了MongoDB数据库 。u003Cu002Fpu003Eu003Cpu003E爬虫部分完整代码如下u003Cu002Fpu003Eu003Cpreu003Eimport requestsu003Cbru003Efrom bs4 import BeautifulSoupu003Cbru003Efrom pymongo import MongoClientu003Cbru003E u003Cbru003Eclass QuNaEr():u003Cbru003E def __init__(self, keyword, page=1):u003Cbru003E self.keyword = keywordu003Cbru003E self.page = pageu003Cbru003E u003Cbru003E def qne_spider(self):u003Cbru003E url = ‘https:u002Fu002Fpiao.qunar.comu002Fticketu002Flist.htm?keyword=%s&region=&from=mpl_search_suggest&page=%s’ % (self.keyword, self.page)u003Cbru003E response = requests.get(url)u003Cbru003E response.encoding = ‘utf-8’u003Cbru003E text = response.textu003Cbru003E bs_obj = BeautifulSoup(text, ‘html.parser’)u003Cbru003E u003Cbru003E arr = bs_obj.find(‘div’, {‘class’: ‘result_list’}).contentsu003Cbru003E for i in arr:u003Cbru003E info = i.attrsu003Cbru003E # 景区名称u003Cbru003E name = info.get(‘data-sight-name’)u003Cbru003E # 地址u003Cbru003E address = info.get(‘data-address’)u003Cbru003E # 近期售票数u003Cbru003E count = info.get(‘data-sale-count’)u003Cbru003E # 经纬度u003Cbru003E point = info.get(‘data-point’)u003Cbru003E u003Cbru003E # 起始价格u003Cbru003E price = i.find(‘span’, {‘class’: ‘sight_item_price’})u003Cbru003E price = price.find_all(’em’)u003Cbru003E price = price[0].textu003Cbru003E u003Cbru003E conn = MongoClient(‘localhost’, port=27017)u003Cbru003E db = conn.QuNaEr # 库u003Cbru003E table = db.qunaer_51 # 表u003Cbru003E u003Cbru003E table.insert_one({u003Cbru003E ‘name’ : name,u003Cbru003E ‘address’ : address,u003Cbru003E ‘count’ : int(count),u003Cbru003E ‘point’ : point,u003Cbru003E ‘price’ : float(price),u003Cbru003E ‘city’ : self.keywordu003Cbru003E })u003Cbru003E u003Cbru003E u003Cbru003E u003Cbru003Eif __name__ == ‘__main__’:u003Cbru003E citys = [‘北京’, ‘上海’, ‘成都’, ‘三亚’, ‘广州’, ‘重庆’, ‘深圳’, ‘西安’, ‘杭州’, ‘厦门’, ‘武汉’, ‘大连’, ‘苏州’]u003Cbru003E for i in citys:u003Cbru003E for page in range(1, 5):u003Cbru003E qne = QuNaEr(i, page=page)u003Cbru003E qne.qne_spider()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E效果图如下u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F5407c7379e60499f96a172346f130ad0″ img_width=”1080″ img_height=”624″ alt=”十一就要来了Python 爬取 13 个旅游城市,告诉你大家爱去哪玩?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E有了数据,我们就可以分析出自己想要的东西了u003Cu002Fpu003Eu003Cpu003E1、最受欢迎的15个景区u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F737e0a55ac5147708a154ce337a84553″ img_width=”640″ img_height=”480″ alt=”十一就要来了Python 爬取 13 个旅游城市,告诉你大家爱去哪玩?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E由图可以看出,在选择的13个城市中,最热门的景区为上海的迪士尼乐园u003Cu002Fpu003Eu003Cpu003E代码如下u003Cu002Fpu003Eu003Cpreu003Efrom pymongo import MongoClientu003Cbru003E# 设置字体,不然无法显示中文u003Cbru003Efrom pylab import *u003Cbru003E u003Cbru003Empl.rcParams[‘font.sans-serif’] = [‘SimHei’]u003Cbru003E u003Cbru003Econn = MongoClient(‘localhost’, port=27017)u003Cbru003Edb = conn.QuNaEr # 库u003Cbru003Etable = db.qunaer_51 # 表u003Cbru003E u003Cbru003Eresult = table.find().sort([(‘count’, -1)]).limit(15)u003Cbru003E# x,y轴数据u003Cbru003Ex_arr = [] # 景区名称u003Cbru003Ey_arr = [] # 销量u003Cbru003Efor i in result:u003Cbru003E x_arr.append(i[‘name’])u003Cbru003E y_arr.append(i[‘count’])u003Cbru003E u003Cbru003E”””u003Cbru003E去哪儿月销量排行榜u003Cbru003E”””u003Cbru003Eplt.bar(x_arr, y_arr, color=’rgb’) # 指定color,不然所有的柱体都会是一个颜色u003Cbru003Eplt.gcf().autofmt_xdate() # 旋转x轴,避免重叠u003Cbru003Eplt.xlabel(u’景点名称’) # x轴描述信息u003Cbru003Eplt.ylabel(u’月销量’) # y轴描述信息u003Cbru003Eplt.title(u’拉钩景点月销量统计表’) # 指定图表描述信息u003Cbru003Eplt.ylim(0, 4000) # 指定Y轴的高度u003Cbru003Eplt.savefig(‘去哪儿月销售量排行榜’) # 保存为图片u003Cbru003Eplt.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E2、景区热力图u003Cu002Fpu003Eu003Cpu003E这里为了方(tou)便(lan),只展示一下北京地区的景区热力图。用到了百度地图的开放平台。首先需要先注册开发者信息,首页底部有个申请秘钥的按钮,点击进行创建就可以了。我的应用类型选择的是浏览器端,因此只需要组装数据替换掉相应html代码即可。另外还需要将自己访问应用的AK替换掉。效果图如下u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fff0c43d3687047dd8739c08ea1a609af” img_width=”744″ img_height=”500″ alt=”十一就要来了Python 爬取 13 个旅游城市,告诉你大家爱去哪玩?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E3、景区价格u003Cu002Fpu003Eu003Cpu003E价格是出游第一个要考虑的,一开始想统计一下各城市的平均价格,但是后来发现效果不是很好,比如北京的刘老根大舞台价格在580元,这样拉高了平均价格。就好比姚明和潘长江的平均身高在190cm,并没有什么说服力。所以索性展示一下景区的价格分布。u003Cu002Fpu003Eu003Cpu003E根据价格设置了六个区间u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F3c76e6b4c79c49759907f202c91f4314″ img_width=”647″ img_height=”479″ alt=”十一就要来了Python 爬取 13 个旅游城市,告诉你大家爱去哪玩?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E通过上图得知,大部分的景区门票价格都在200元以下。每次旅游花费基本都在交通、住宿、吃吃喝喝上了。门票占比还是比较少的。u003Cu002Fpu003Eu003Cpu003E代码如下u003Cu002Fpu003Eu003Cpreu003Earr = [[0, 50], [50,100], [100, 200], [200,300], [300,500], [500,1000]]u003Cbru003Ename_arr = []u003Cbru003Etotal_arr = []u003Cbru003Efor i in arr:u003Cbru003E result = table.count({‘price’: {‘$gte’: i[0], ‘$lt’: i[1]}})u003Cbru003E name = ‘%s元 ~ %s元 ‘ % (i[0], i[1])u003Cbru003E name_arr.append(name)u003Cbru003E total_arr.append(result)u003Cbru003E u003Cbru003Ecolor = ‘red’, ‘orange’, ‘green’, ‘blue’, ‘gray’, ‘goldenrod’ # 各类别颜色u003Cbru003Eexplode = (0.2, 0, 0, 0, 0, 0) # 各类别的偏移半径u003Cbru003E u003Cbru003E# 绘制饼状图u003Cbru003Epie = plt.pie(total_arr, colors=color, explode=explode, labels=name_arr, shadow=True, autopct=’%1.1f%%’)u003Cbru003E u003Cbru003Eplt.axis(‘equal’)u003Cbru003Eplt.title(u’热点旅游景区门票价格比例’, fontsize=12)u003Cbru003E u003Cbru003Eplt.legend(loc=0, bbox_to_anchor=(0.82, 1)) # 图例u003Cbru003E# 设置legend的字体大小u003Cbru003Eleg = plt.gca().get_legend()u003Cbru003Eltext = leg.get_texts()u003Cbru003Eplt.setp(ltext, fontsize=6)u003Cbru003E# 显示图u003Cbru003Eplt.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cu002Fdivu003E”

原文始发于:十一就要来了Python 爬取 13 个旅游城市,告诉你大家爱去哪玩?

主题测试文章,只做测试使用。发布者:醒百年,转转请注明出处:http://www.cxybcw.com/13576.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code