python爬虫 抓取《极简宇宙史》书评,制作词云

python 爬虫 抓取豆瓣《极简宇宙史》书评,制作词云

整个过程分为两大步:

  1. 爬取豆瓣豆瓣《极简宇宙史》书评
  2. 制作中文词云
    下面开始正式内容:

爬取豆瓣豆瓣《极简宇宙史》书评

打开豆瓣网站,转至《极简宇宙史》书评页面链接

image.png

打开页面我们可以看到截止到目前共有1354条短评
我们爬取书评用的是python语言,用到的库有 requests,还BeautifulSoup。
requests主要用来请求网页数据,BeautifulSoup用来解析网页数据。

安装requests,BeautifulSoup库

我用的是python自带的pip命令安装,
打开python根目录

image.png

按住shift+鼠标右键、,打开命令行窗口
在命令行窗口输入:

 pip install requests

安装好requests,再安装beautifulsoup:

 pip install beautifulsoup

把这两个库安装好之后,我们就可以进行数据抓取工作了!

分析网页源码,进行数据抓取

在书评的网页页面,鼠标右键单击,会出来一个选项窗口,选中检查,会出现网页源码,如下图所示:


网页源码

经过分析查看,我们可以发现,所有书评都存放在一个叫
div class=''article''当中
再进一步分析,可以发现,全部书评是存放在 p class="comment-content"当中,找到书评具体存放位置就好办了,下面就可以开始抓取书评


网页源码中找到书评具体存放位置

导入 requests,BeautifulSoup 两个库,另外也导入系统自带time函数(防止短时间内获取数据服务器不响应)。

coding = "UTF-8"
#引入 requests BeautifulSoup 两个
import requests
from bs4 import BeautifulSoup
import time
#先命名一个空list
sm_list = []
#填写头部信息
headers = {'Host':'book.douban.com',
'Referer':'https://book.douban.com/subject/26697350/',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
}
#先利用requests请求网页信息,这里的循环主要作用是我们发现书评有1354条,每页有20条,将近70页,这里用字符串格式化操作,进行遍历抓取数据
for page in range(1,70):
    url = 'https://book.douban.com/subject/26697350/comments/hot?p={}'.format(page)
    req = requests.get(url,headers=headers)
    content = req.content
    soup = BeautifulSoup(content,'lxml')
    article = soup.find('div',class_='article')
    list = article.find_all('p',attrs ={'class':'comment-content'},)
    for i in list:
        shuji_list = i.get_text().replace('\n','')
        sm_list.append(shuji_list)
  #这里我设置时间间隔为1秒
 time.sleep(1)
   print(page)
print(sm_list)

耐心等待数据抓取......


等待数据抓取...

数据抓取完之后,把全部书评复制到桌面的一个新建文本文档中。


抓取好的全部书评数据

进行数据清洗,利用正则表达式删除全部标点

我们抓取的书评是一个list,我们要先把这个list变为字符串,方法很简单,直接打开桌面的新建文本文档把最开始和最后面的两个中括号去掉就可以。
下面我们开始用正则表达式批量删除标点

用正则表达式删除标点

源码如下:

# coding=utf-8
import re
s = '''晒着八分二十秒到达的阳光,看着一百多万年前的恒星爆炸,还有什么再浪漫的事嘛', '
笑哭了...泡利在发现此原则前刚被他太太抛弃……他太太的离开是因为一位化学家,对于
理论物理学家来说,这实在是奇耻大辱,因此泡利开始用酒精来埋葬自己的悲伤。所以他以
“不相容”来命名自己的原则也不再奇怪。****奇耻大辱啊奇耻大辱一本温柔的书。更像是
【【【【【【【【【为了大家阅读代码方便,我把中间大段书评删除掉,大家到时候把书评全部复制上去即可】】】】】】】】
究竟能探寻到宇宙的秘密。那么意识又怎么会像唯物论中那般卑微,物质才不过是万千粒子
,循化往复,智慧才建立文明,我并不信仰人格化的神,但我真的觉得人自以为认识世界的
时候原来从不曾认识世界。', '写的很通俗,很有趣。但对于我这样的物理盲来说,看起来
还是挺费劲的。好处在于看完之后我对我们所处的世界有了新的认识。', '还可以', '看完
之后居然发现自己可以看懂时间简史了。', '停不下来 有魔力'''
print(re.sub('\W','',s))

这是去除标点后的文本:


image.png

删除标点后的书评文本

注意,至此,我们就已经完成对《极简宇宙史》书评的抓取,并且已经全部去除标点,保存在桌面文档中,下一步就可以开始制作词云了!!!

制作中文词云

制作中文词云我们要用到matplotlib,wordcloud,jieba 这三个库,这三个库的安装上方跟上面类似
我们把删除标点后的书评存放在桌面一个名叫“jijian.txt" 的文档中。
下面直接上源码:

#导入三个库
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import jieba
#用open函数打开文档,读取内容存放在text文件中
text = open('C:\\Users\\Administrator\\Desktop\\jijian.txt').read()
#用jieba库对文档进行分词,分词后存储在一个叫wordlist_jieba的文件中,这个文件为list格式
wordlist_jieba = jieba.cut(text, cut_all = True)
#用join函数将list转为str
wordstr = " ".join(wordlist_jieba)
#用wordcloud生成词云
my_wordcloud = WordCloud().generate(wordstr)
 
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()

运行程序之后,生成的词云如图所示:

image.png

至此,我们就完成了对豆瓣《极简宇宙史》书评的抓取,并制作词云完成。
从词云中可以看出,出现频次最高的词语为:宇宙,物理,我们,作者,还是,知识,一个,世界,自己,理论。效果还算理想!!!

几点思考:

  1. 词云已经初步生成,但有时候我们抓取的信息中无效信息太多,如出现频次较高的如”的“,”我“,”你“之类的无关词语太多,影响我们判断信息主旨。下一步可以通过jieba添加字典,过滤无效信息。
  2. 有时候分析不准确,有可能出现”互联“,”互联网“这两个词频较高的词,可以利用jieba不同的分词模式。避免这种情况出现,或者是添加字典,定向排除某些词语。
  3. 这次生成的词云是系统系统默认的格式,下一步可以研究通过插入图片,生成图片形状的词云,也可以设置频次出现最高的词语的个数,词云背景色等等......生成更美观的词云
  4. 这次爬虫只是利用最基础的requests,beautifulSoup库,而且网站没有反爬虫机制,算是比较顺利的爬取下数据,属于静态页面。而且数据量较小。以后爬取大量数据可以学习使用Scrapy,多线程爬取数据。
  5. 这次爬完数据仔细阅读发现,我设置爬取页面为1到10页时,数据就可以全部下载下,设置为1到12页时,爬取的数据中第1页的第1条书评就缺失,当爬取页面设置为1到70页时,发现前面的书评缺失的更多,一直想不明白是什么原因,还望高人解答。
    总之,需要学习的还有很多。

以上,可以作为自己近阶段学习的总结笔记,也勉强可以作为小白入门不算及格的教程吧!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 声明:本文讲解的实战内容,均仅用于学习交流,请勿用于任何商业用途! 一、前言 强烈建议:请在电脑的陪同下,阅读本文...
    Bruce_Szh阅读 12,700评论 6 28
  • 爬虫文章 in 简书程序员专题: like:128 - Python 爬取落网音乐 like:127 - 【图文详...
    treelake阅读 29,548评论 33 638
  • Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细...
    楚江数据阅读 1,469评论 0 6
  • 有个妹子同事计划国庆要去美国看男朋友。 想到因人事调动很快我也要离开这了,就给妹子挑了本书准备送她。这不,刚从家楼...
    小米罖阅读 232评论 0 0
  • 克烈部的灭亡 征服克列部之后,铁木真率部前往阿卜只阿——阔迭格儿山附近过冬(公元1203—1204年冬)。阿卜只阿...
    bybateer阅读 2,135评论 1 2