来源:Python数据之道
作者:Peter
整理:Lemon
长沙,著名的"星城"、"娱乐之都",湖南省省会,素有“屈贾之乡”、“山水洲城”之名。每年都有很多的游客到长沙旅游,不仅是因为美食多,比如:文和友小龙虾、臭豆腐、糖油粑粑,以及网红奶茶茶颜悦色,还因为长沙真的有很多可以游逛的美景。
本文将结合实际的数据来告诉你,如果你想去长沙旅游,你应该去哪里玩。湖南欢迎你,长沙欢迎你!
![](https://i-blog.csdnimg.cn/blog_migrate/069c86e1b97df0fcd67546ee38413de7.png)
系统环境
Macos
jupyter notebook
python3.7.5
Pyecharts 1.7.1
特别提醒下,Pyecharts 的版本一定要保持一致。
数据获取
导入库
首先我们需要导入各种库,这些库的主要功能如下
爬虫请求发送及数据解析
csv 保存爬取到的数据
Pandas 处理爬取到的数据
Jieba 中文分词
Pyecharts 绘图专用库
import pandas as pd
import re
import csv
import json
import requests
import random
# 显示所有列
# pd.set_option('display.max_columns', None)
# 显示所有行
# pd.set_option('display.max_rows', None)
# 设置value的显示长度为100,默认为50
# pd.set_option('max_colwidth',100)
# 绘图相关
import jieba
import matplotlib.pyplot as plt
from pyecharts.globals import CurrentConfig, OnlineHostType # 事先导入,防止不出图
from pyecharts import options as opts # 配置项
from pyecharts.charts import Bar, Pie, Line, HeatMap, Funnel, WordCloud, Grid, Page # 各个图形的类
from pyecharts.faker import Faker # 自身数据
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType,SymbolType
![](https://i-blog.csdnimg.cn/blog_migrate/3fb7b1f3bef4ad4ca0eff99f46dc5777.png)
爬取信息
先确定我们爬取的字段信息:
中文名:cn_title
英文名:en_title
排名:ranking
驴友百分比:lvyou
地点:location
简介:abstract
评论数:comment
攻略数:strategy
![](https://i-blog.csdnimg.cn/blog_migrate/f3d931eaf71fde40db3f2a470369f20a.png)
网页规律
首先看看网站 URL 的规律:
https://travel.qunar.com/p-cs300022-changsha-jingdian-1-1
https://travel.qunar.com/p-cs300022-changsha-jingdian-1-2
https://travel.qunar.com/p-cs300022-changsha-jingdian-1-3
![](https://i-blog.csdnimg.cn/blog_migrate/e0448ba4f9d966111ac7d08f905c41eb.png)
我们发现是通过最后的数字来更新 URL 地址的,因此实际爬虫中我们构造了一个 URL 地址来循环爬取:
for i in range(1,165):
"https://travel.qunar.com/p-cs300022-changsha-jingdian-1-{}".format(i)
单页源码获取
我们使用 requests
模块来发送爬虫请求:
url = "https://travel.qunar.com/p-cs300022-changsha-jingdian-1-1"
# 需要更换自己的请求头
headers = {"user-agent": "个人实际请求头"}
response = requests.get(url=url,headers=headers)
result = response.content.decode()
源码规律
每页有 10 个景点(最后一页可能没有),再看看每个页面源码的规律:每个 <li></li>
标签中代表一个景点
![](https://i-blog.csdnimg.cn/blog_migrate/0a30c7051b232dbc420db9bf68bfd4fb.png)
看看第一个景点(橘子洲)中 8 个字段信息所在的位置:
![](https://i-blog.csdnimg.cn/blog_migrate/bbd9d4673eb6154836f5854b8d2f6a74.png)
正则匹配单页数据
我们使用 re 模块通过正则表达式来解析需要爬取的字段。
关于正则表达式的使用,「Python数据之道」之前有过分享,大家可以点击链接前往: