阅读背景:

去哪儿旅行,景点热度排行爬取案例

来源:互联网 
本案例对旅游景点的热度,点评数量,排行等进行了爬取,后期数据处理部分还有提高空间,请读者自行编写。 # -*- coding: utf-8 -*- """ Created on Wed Apr 3 17:48:21 2019 @author: iHJX_Alienware """ import requests from bs4 import BeautifulSoup import numpy as np import pandas as pd import matplotlib.pyplot as plt print('导入模块') import matplotlib.pyplot as plt import seaborn as sns plt.rcParams['font.sans-serif'] = ['SimHei'] # Matplotlib中设置字体-黑体,解决Matplotlib中文乱码问题 plt.rcParams['axes.unicode_minus'] = False # 解决Matplotlib坐标轴负号'-'显示为方块的问题 #获取连接网页数据 def get_urls(n): return ['https://travel.qunar.com/p-cs300153-rizhao-jingdian-1-' + str(i+1) for i in range(n)] # 创建函数,获取分页网址 #获取具体需要的参数 def get_informations(u): ri = requests.get(u) # requests访问网站 soupi = BeautifulSoup(ri.text,'lxml') # bs解析页面 infori = soupi.find('ul',class_="list_item clrfix").find_all('li') # 获取列表内容 datai = [] n=0 for i in infori: n+=1 #print(i.text) dic = {} dic['lat'] = i['data-lat'] dic['lng'] = i['data-lng'] dic['景点名称'] = i.find('span',class_="cn_tit").text dic['攻略提到数量'] = i.find('div',class_="strategy_sum").text dic['点评数量'] = i.find('div',class_="comment_sum").text dic['景点排名'] = i.find('span',class_="ranking_sum").text dic['星级'] = i.find('span',class_="total_star").find('span')['style'].split(':')[1] datai.append(dic) #列表包字典 # 分别获取字段内容 #print('已采集%s条数据' %(n*10)) return datai # 构建页面爬虫 #标准化某一指标便于对比 def normalization(dfi, col): dfi[col + "_nor"] = (dfi[col] - dfi[col].min())/(dfi[col].max() - dfi[col].min()) if __name__ == '__main__': #获取多页网页数据 url_lst = get_urls(20) #将数据转化为dataframe格式便于处理 df = pd.DataFrame() for u in url_lst: dfi = pd.DataFrame(get_informations(u)) df = pd.concat([df,dfi]) df.reset_index(inplace = True,drop = True) # 采集数据 #对dataframe中的数据格式进行调整 df['lng'] = df['lng'].astype(np.float) df['lat'] = df['lat'].astype(np.float) df['点评数量'] = df['点评数量'].astype(np.int) df['攻略提到数量'] = df['攻略提到数量'].astype(np.int) # 字段类型处理 df['星级'] = df['星级'].str.replace('%','').astype(np.float) # 星级字段处理 df['景点排名'] = df['景点排名'].str.split('第').str[1] df['景点排名'].fillna(value = 0,inplace = True) normalization(df, '点评数量') #输出为excel形式 df.to_excel("./result.xlsx") 效果图,有什么地方看不懂,可以留言给我 本案例对旅游景点的热度,点评数量,排行等进行了爬取,后期数据处理部分还有提高空间,请读者自行编写。



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: