本次爬虫项目将会爬取携程网中关于“周庄古镇”的点评,然后对这些评论进行中文分词及预处理,形成一张关于“周庄古镇”的词云图,得到可视化的分析结果。

项目介绍

  马上要到中秋啦,正好这几天在公司不太忙,想着中秋假期即将去周庄旅游,于是,笔者心血来潮地想到,能不能利用爬虫做一些关于周庄的分析呢?琢磨许久,笔者终于有了思路,因此,本次爬虫的大致思路是这样的:

  • 获取数据: 利用爬虫爬取携程网中关于周庄的点评
  • 文本预处理:对这些评论进行中文分词以及预处理
  • 可视化分析: 制作词云图并分析

  整个项目的结构如下:

其中,两个Python文件分别为爬虫文件和文本预处理及制作词云图文件,zhouzhuang.csv为爬取的评论文件,zhouzhuang.txt为结巴分词时添加的词语文件,simsun.ttc为制作词云图时的字体文件(为了能在词云图中正确地显示中文,你需要这个字体文件)。

爬取携程中的评论

  首先我们需要获取数据,即关于周庄的点评。笔者选取携程网中对“周庄古镇”的点评作为项目的数据集,具体网址为:http://you.ctrip.com/sight/zhouzhuang81/109861-dianping.html 。该网页一共有8285条点评,共分415页展示,每页20条评论,评论有长有短,也有图片,我们只需要评论中的文字部分。如下图所示:

  接下来,笔者利用Python爬取这些网页中评论,完整的Python代码(zhouzhuang_comments_scrape.py)如下:

import requests
import pandas as pd
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED# 评论列表
comments = []# 提取评论,传入参数为网址url
def get_comment(url):global commentstry:# 发送HTTP请求headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 \(KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'}r = requests.get(url=url, headers=headers)# 解析网页,定位到评论部分soup = BeautifulSoup(r.text, 'lxml')main_content = soup.find_all('div', class_='comment_single')# 提取评论for para in main_content:comment = para.find('span', class_='heightbox')print(comment.text)comments.append(comment.text.replace('&quot', ''))except Exception as err:print(err)def main():# 请求网址(共415个网页)urls = ["http://you.ctrip.com/sight/zhouzhuang81/109861-dianping-p%d.html"%x for x in range(1,416)]urls[0] = urls[0].replace('-p1', '')# 利用多线程爬取景点评论executor = ThreadPoolExecutor(max_workers=20)  # 可以自己调整max_workers,即线程的个数# submit()的参数: 第一个为函数, 之后为该函数的传入参数,允许有多个future_tasks = [executor.submit(get_comment, url) for url in urls]# 等待所有的线程完成,才进入后续的执行wait(future_tasks, return_when=ALL_COMPLETED)# 创建DataFrame并保存到csv文件comments_table = pd.DataFrame({'id': range(1, len(comments)+1),'comments': comments})comments_table.to_csv(r"./ZhouZhuang/zhouzhuang.csv", index=False)main()

在这个爬虫中,我们利用了concurrent.futures这个模块中的多线程来加速爬取评论,同时将这个评论储存在pandas中的DataFrame中,最后将这些评论保存为zhouzhuang.csv文件,便于后续的文本预处理。zhouzhuang.csv文件的内容如下:


  事实表明,该网站虽然写着有8285条评论,但csv文件中却只有3020条评论,而且笔者自己也验证了以下,大概200页之后的网站确实也没评论了,难道需要其它操作?Anyway,3千多条评论足够了。

文本预处理

  在这部分,我们只是讲解文本预处理的操作流程,并不会给出Python代码,Python代码会在后续的“制作词云图”部分一起给出,作为一个完整的Python文件。
  文本预处理的流程如下:

  • 利用Pandas读取评论的csv文件(zhouzhuang.csv);
  • 对该csv文件中的每一条评论,先进行中文分词处理(带有词性标注),然后去掉特殊字符和标点符号,再去掉常用的停用词(stopwords);
  • 对评论中的名次及词性为“非语素字” 的词语进行词频统计。

  我们给出在中文分词过程中用到的用户自己添加的词语,即zhouzhuang.txt中的词语,如下:

江南水乡
江南第一水乡
沈万三
周庄
苏州
昆山
纸箱王主题创意园区
纸箱王
双桥
沈万三故居
沈厅
古戏台
张厅
四季周庄
周庄南湖
富安桥
迷楼
怪楼
贞丰桥
逸飞之家
生命奥秘博物馆
贞丰文化街
台湾老街
沈万三水冢
太平桥
全福讲寺
澄虚道院
周庄舫
叶楚伧故居
牌楼塔影
爱渡风情小镇
源丰顺酒作坊
白蚬湖
周庄博物馆
戴宅
福洪桥
万三水上财道游
古镇水巷游
南湖秋月园
全福塔
全福长桥
蚬江渔唱馆
蜡工坊名人蜡像馆
画家村
大诚堂
亲亲鱼鱼疗馆
太史淀
周庄绿乐园
大吉祥文化馆
周庄魔城
云海塔
周庄富贵园
永庆庵
舟际皮划艇俱乐部
英伦骑士马术俱乐部
网咖
江南第一水乡
万三蹄髈
朱元璋
5A级景区
北宋
元祐元年
万三蹄
江南六大古镇
完美
月圆之夜
5A级景区
万三
平江路
山塘街
同里
万历年间
万历
乌镇
第一水乡
打call
5A级旅游景区
5A景区
陈逸飞

制作词云图

  接下来就是最后的制作词云图部分了,在这儿,我们可以得到关于“周庄古镇”的评论的可视化结果。
  需要注意的是,你的Python中需要安装wordcloud模块,同时,为了能在词云图中正常地显示中文,需要添加一下中文字体库。具体的制作过程不再详述,笔者这里只给出最简单的词云图绘制。
  完整的Python代码(comments_anlysis.py)如下

# -*- coding: utf-8 -*-
import jieba.posseg
import pandas as pd
from collections import defaultdict
import matplotlib.pyplot as plt
from wordcloud import WordCloud# 词频统计字典
dic = defaultdict(int)# 对每条评论进行分词及预处理
def cut_word(sentence):# 去掉句子中的特殊字符及标点符号sentence = sentence.replace('&quot', '').replace('\n', '')biaodian_list = '~!@#¥%……&*()【】{}:;‘’“”《》,。、? -_,./<>;:\'"!$^()  ヾ?~≈′'for biaodian in biaodian_list:sentence = sentence.replace(biaodian, '')# 分词(带词性标注)words = jieba.posseg.cut(sentence)# 常用词stop_words = ['的', '我', '你', '他', '她', '它', '我们', '你们', '他们', '她们', '它们', \'这', '这儿', '那', '那儿', '在', '在哪', '这里', '哪里', '那里', '了', '吗','啊', \'是', '不是', '着', '谢谢', '也', '就', '去', '到', '可以', '不', '什么', '会', \'再', '哦', '有', '很', '都', '和', '还是', '还', '感觉', '上', '但', '来',\'一个', '地方', '就是',  '里面', '一次', '一些', '这次', '已经', '又', '个', '这个', \'那个', '要', '但是', '里', '看', '住', '让', '太', '没', '说', '时候',\'小', '大', '还有', '走', '不过', '比较']# 只统计名词或词性为x的词语for word in words:# 去掉句子中的常用词if word.word not in stop_words:# 判断是否为名词if 'n' in word.flag or 'x' in word.flag:word = word.word # 取出该名词print(word)dic[word] += 1def main():jieba.load_userdict(r'./Zhouzhuang/zhouzhuang.txt')# 读取评论csv文件并进行分词,预处理,统计词频操作df = pd.read_csv(r'./Zhouzhuang/zhouzhuang.csv', encoding='utf-8')df['comments'].apply(lambda x: cut_word(x))# 对词语进行排序sort_dict = sorted(dic.items(), key=lambda x: x[1], reverse=True)# print(sort_dict)wl_space_split = []for i in range(40):print(sort_dict[i])for _ in range(sort_dict[i][1]):wl_space_split.append(sort_dict[i][0])# 产生词云图并显示my_wordcloud = WordCloud(font_path=r"./Zhouzhuang/simsun.ttc", background_color='white')\.generate(" ".join(wl_space_split))plt.imshow(my_wordcloud)plt.axis("off")plt.show()main()

  最高频的40个词语如下:

('周庄', 2375)
('古镇', 1187)
('人', 1113)
('小桥流水', 466)
('门票', 456)
('江南', 456)
('景区', 454)
('水乡', 416)
('江南水乡', 372)
('景点', 358)
('人家', 337)
('景色', 287)
('沈厅', 261)
('商业', 252)
('中国', 250)
('商业化', 244)
('特色', 243)
('万三蹄', 215)
('风景', 205)
('建议', 194)
('气息', 193)
('美', 192)
('双桥', 188)
('第一水乡', 179)
('有点', 178)
('小镇', 176)
('味道', 172)
('苏州', 171)
('乌镇', 169)
('客栈', 165)
('张厅', 161)
('导游', 148)
('生活', 147)
('建筑', 147)
('时间', 145)
('游玩', 143)
('沈万三', 142)
('文化', 140)
('夜景', 139)
('游客', 139)

产生的词云图如下:

自己的分析

  嗯,好不容易用自己的方法得到了可视化的结果,即上述的词云图,那么,对笔者的中秋之旅会有什么建议呢?

  1. 周庄是个古镇,江南水乡,小桥流水,风景应该很不错。所以,在旅游的过程中,要欣赏景色,也许夜景也是不错的。
  2. 周庄的很多景点及特色也在词云图中有展示,如沈厅,张厅,双桥,万三蹄等,那么,在旅游的过程中,这些事物是不该错过的。
  3. 也有很多人对商业化提出了看法,也许,中国的古镇商业化确实太严重了,搞得所有的古镇都是一个样子,少了很多趣味。
  4. 至于词云图中为什么没有出现“人”,“美”等词语,这是可以打一个问号的。

项目总结

  本次爬虫项目,爬取了携程网中关于“周庄古镇”的点评,然后对这些评论进行中文分词及预处理,形成一张关于“周庄古镇”的词云图,得到笔者自己的一些分析结果。当然,我们能做的还有很多,比如对评论中提到的景区进行统计,绘制景点提到频数直方图等。
  所谓爬虫,其意义在于为数据建模提供数据,因此,对于数据分析和建模来说,爬虫只是万里长征的第一步。当然,爬虫也可以做很多有意义的事情,那么,你有哪些有意思的项目呢?欢迎交流哦~

  本次爬虫项目仅作为笔者的练手项目,并不作为商用。如有转载或商用,请及时联系笔者,谢谢~
  提前祝大家中秋节快乐~

注意:本人现已开通微信公众号: 轻松学会Python爬虫(微信号为:easy_web_scrape), 欢迎大家关注哦~~

转载于:https://www.cnblogs.com/jclian91/p/9680981.html

爬虫眼中的“周庄”长什么样?相关推荐

  1. python学到什么程度可以写爬虫-刚开始学习 Python 到可以写出一个爬虫大约需要多长时间...

    学习 Python 的三种境界 前言王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:"昨夜西风凋碧树,独上高楼,望尽天涯路'. ...

  2. 学python需要多久-刚开始学习 Python 到可以写出一个爬虫大约需要多长时间

    学习 Python 的三种境界 前言王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:"昨夜西风凋碧树,独上高楼,望尽天涯路'. ...

  3. XPath与多线程爬虫

    一.  Xpath的介绍与配置 1.      XPath是什么 XPath是一门语言 XPath可以在XML文档中查找信息 XPath支持HTML XPath通过元素和属性进行导航 总结: XPat ...

  4. 好用的爬虫软件?动态ip软件告诉你

    现在网络上有很多的爬虫软件和爬虫教程,但是想要选择一个好的采集工具没有那么容易. 首先我不推荐的是网上的爬虫教程和源代码,并不是说它们不好,但是爬虫教程一般历时长,而且需要你能够学会相应的编程代码等等 ...

  5. python爬虫原理-python爬虫之认识爬虫和爬虫原理

    python爬虫之基础学习(一) 网络爬虫 网络爬虫也叫网络蜘蛛.网络机器人.如今属于数据的时代,信息采集变得尤为重要,可以想象单单依靠人力去采集,是一件无比艰辛和困难的事情.网络爬虫的产生就是代替人 ...

  6. python2.7下同步华为云照片的爬虫程序实现

    1.背景 随着华为手机的销量加大,华为云的捆绑服务使用量也越来越广泛,华为云支持自动同步照片.通讯录.记事本等,用着确实也挺方便的,云服务带来方便的同时,也带来了数据管理风险. 华为目前只提供一个ww ...

  7. Python 爬虫进阶一之爬虫框架概述

    综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化 Python 相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一 ...

  8. 一个四维的人在三维世界里到底长什么模样?

    " 我们曾经仰望浩瀚的星空,思考自身的存在." --< 星际穿越 > 今天我们来聊聊维度... 大家有没想过,我们所处的宇宙,其实是一个多维宇宙. 但可惜的是人类仅仅只 ...

  9. Python 爬虫“学前班”!学会免踩坑!

    作者 | 喵叔 责编 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 爬虫应用的广泛,例如搜索引擎.采集数据.广告过滤.数据分析等.当我们对少数网站内容进行爬取时写多个爬虫还是有可能的,但是 ...

最新文章

  1. 使用CTE替换派生表语法
  2. javascript Date 格式化
  3. CSS实现div梯形分割
  4. python多线程没用_Python中的多线程cv2.imshow()不起作用
  5. 智伴机器人三级分销模式_企业选择微信三级分销定制开发原因?
  6. angular6 设置全局变量_Angularjs 设置全局变量的方法总结
  7. rtl8811au黑苹果10.15_荣耀MagicBook I5黑苹果折腾记(超详细教程与排坑)
  8. Cocos Creator 如何在 VideoPlayer 上面放置 UI 控件
  9. 打印服务Print Spooler自动停止解决方案
  10. 对服务器进行DDoS攻击测试
  11. JAVAGUI设计步骤
  12. NDB Cluster 基本介绍
  13. (转)pip安装报错:There was a problem confirming the ssl certificate
  14. 9. PHP接入微信支付订单、退款订单、转款订单的查询
  15. 绿皮车里的温馨服务 情暖回家路
  16. 唐读笔记-正则表达式必知必会
  17. 有限视图(Limited View)断层重建--CasRedSCAN论文阅读
  18. 关于如何将代码上传到gitee仓库的详细步骤
  19. MySQL优化之——函数
  20. 以太坊智能合约的生命周期

热门文章

  1. 如何提高团队管理能力
  2. 什么是 DORA 指标以及它们如何告知 DevOps 成功?
  3. CANoe 入门 _CAPL编程
  4. 高层住宅手机信号差与基站天线高度等有关
  5. 国开本科计算机应用基础操作题,新版国家开放大学中央电大本科计算机应用基础操作题题库...
  6. AS安装模拟器要安装加速器
  7. 华为p40pro android11,90Hz的华为P40Pro用了半年?最流畅的安卓旗舰?
  8. put请求400状态码
  9. vue+vuecli+webpack中使用mockjs模拟后端数据
  10. 会撸猫了不起啊?有本事自己写一个撸猫撸鱼撸飞机才是牛逼