相关内容    简体    繁体

python爬取《三国演义》小说&统计词频&生成词云图


 

python爬取《三国演义》小说&统计词频&生成词云图

注意点:

  1. 爬取小说正文时用的正则表达式涉及到多行匹配。需要开启多行模式(?s) book_content_re = re.compile(r'(?s)<div.*?id="htmlContent">(.*?)</div>')

image.png

image.png

image.png

image.png

源代码练习

 
import re
 import requests
 import jieba
 import jieba.analyse
 import codecs
 from collections import Counter
 import wordcloud
 import matplotlib.pyplot as plt
 ​
 # 要爬取的网址url
 url = 'http://www.janpn.com/book/sanguoyanyi2.html'def get_content(url):
 ​
     # 先获取二进制数据,再进行编码
 ​
     txt = requests.get(url).content.decode('utf-8')
 ​
     # print(txt)
 ​
     book_title = re.compile(r'<h3 class="bookTitle">(.+)</h3>')
     # m1.findall(txt)得到的是一个数组,取m1.findall(txt)[0]
     # print(m1.findall(txt))
# book_chapters_re = re.compile(r'<li><a href="(.+\.html)">([第|回].+)</a></li>')
     # book_chapters_re = re.compile(r'<ul class="panel-body panel-chapterlist"><li><a href="(.+)">(.*)</a></li></ul>')
     # 一定要注意   要使用非贪婪模式  来匹配特定结尾.html
     book_chapters_re = re.compile(r'<li><a href="(.*?\.html)".*?>(.+?)</a></li>')
 ​
     book_chapters = book_chapters_re.findall(txt)
     # 开启多行模式  正文是很多段落的
     book_content_re = re.compile(r'(?s)<div.*?id="htmlContent">(.*?)</div>')
 ​
     # 过滤正文的\r\n
     m3 = re.compile(r'\r\n')
     # 过滤正文的&nbsp;
     m4 = re.compile(r'&nbsp;')
     # 过滤正文的<br />
     m5 = re.compile(r'<br />')
 ​
     print(book_chapters)
     # print(book_chapters)
     with open('三国演义.txt','a') as f:
         for i in book_chapters:
             print([i[0],i[1]])
         # print(book_chapters)
             print(i[0])
             i_url = i[0]
             print("正在下载--->%s" % i[1])
         # 根据每个章节的url,先获取二进制,再编码
             content_html = requests.get(i_url).content.decode('utf-8')
 #             匹配正文
             content = book_content_re.findall(content_html)[0]
             print(content)
             content = m3.sub('',content)
             content = m4.sub('',content)
             content = m5.sub('',content)
             print(content)
             f.write('\n'+i[1]+'\n')
             f.write(content)
 ​
 ​
 ​
 # =================================================
# 创建停用词列表
 def stopwordlist():
     stopwords = [line.strip() for line in open('../结巴分词/hit_stopwords.txt',encoding='UTF-8').readline()]
     return stopwords
 ​
 ​
 # 对句子进行中文分词 并 去停用词
 def seg_depart(sentence):
     print('正在分词')
     sentence_depart = jieba.cut(sentence.strip())
 ​
 #     创建一个停用词列表
     stopwords = stopwordlist()
 #     输出结果为outstr
     outstr = ''#     去停用词
     for word in sentence_depart:
         if word not in stopwords:
             if word != '\t':
                 outstr += word
                 outstr += ' '
     return outstr
 ​
 # 读取文件并生成词云图
 filepath = '三国演义.txt'
 def create_word_cloud(filepath):
 ​
     #读取文件内容
     content = codecs.open(filepath,'r','gbk').read()
 ​
 #     去停用词
     content = seg_depart(content)
 ​
 #     结巴分词
     wordlist = jieba.cut(content)
     wl = ' '.join(wordlist)
 ​
     print(wl)
 ​
 #     配置词云图
     wc = wordcloud.WordCloud(
     #     这只背景颜色
         background_color='white',
     #     设置最大显示的词数
         max_words=100,
     #     设置字体路径
         font_path = 'C:\Windows\Fonts\msyh.ttc',
     #
         height=1200,
         width=1600,
     #     设置字体最大值
         max_font_size=300,
     #     设置有多少种随机配色方案
         random_state=50
     )
 ​
 #     生成词云图
     myword = wc.generate(wl)
 ​
 #     展示词云图
     plt.imshow(myword)
     plt.axis('off')
     plt.show()
 ​
 ​
 ​
 # =================================================
# 开启爬虫
 # get_content(url)
# 生成词云图
 create_word_cloud(filepath)
 ​
 # ===================================================
 ​
 ​
 # 读取文件  词频统计
 def count_from_file(filepath,top_limit=0):
     with codecs.open(filepath,'r','gbk') as f:
         content = f.read()
 ​
 #         将多个空格替换为一个空格
         content = re.sub(r'\s+',r' ',content)
         content = re.sub(r'\.+',r' ',content)
 #         去停用词
         content = seg_depart(content)
 ​
         return count_from_str(content)
 ​
 def count_from_str(content,top_limit=0): 
    if top_limit<=0: 
        top_limit=100#         提取文章的关键词 
    tags = jieba.analyse.extract_tags(content,topK=100) 
    print("关键词:") 
    print(tags) 
​ 
    words = jieba.cut(content) 
​ 
    counter = Counter() 
​ 
    for word in words: 
        if word in tags: 
            counter[word]+=1return  counter.most_common(top_limit) 
​ 
​ 
​ 
# ===================================== 
print("打印词频统计") 
​ 
# 打印词频统计 
result = count_from_file(filepath) 
print(result) 
​ 
​ 
def test(url): 
​ 
    # 开启多行匹配模式  因为如果涉及到换行符   就要用多行 
    book_content_re = re.compile(r'(?s)<div.*?id="htmlContent">(.*?)</div>') 
    content_html = requests.get(url).content.decode('gbk') 
    print(content_html) 
    content = book_content_re.findall(content_html) 
    print(content) 
​ 
# test("http://www.janpn.com/book/171/171182/35225767.html")

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 python实例:三国演义TXT文本词频分析 《三国演义》——词云制作 用python分析《三国演义》中人物数据 《三国演义》人物出场次数词云统计 对三国演义人物出现次数统计分析 Python统计excel表格中文本的词频,生成词云图片 词云图 Python利用jieba库做词频统计 《三国演义》里到底描写了多少个人物,你知道吗? python词频统计,生成词云 使用Python统计文件中词频,并且生成词云
 
粤ICP备18138465号  © 2018-2024 CODEPRJ.COM

聚圣源不要轻易说不力的合成生肖牛的孩子起名孩子起名免费软件好炙手可热的意思明星直播用什么软件因为是朋友呀在线观看适合起名字的宋词精选康熙字典起名字冷峻王子的完美公主适合用来起名字的古诗词597厦门人才网小孩起名姓薛英文名起名网免费建筑工程公司起名大全参考挂机宝破案小说甘肃移动网上营业厅辞职申请周易起名测分免费论坛名字起什么好云 起名相逢是首歌作文江国栋结合八字公司起名京沪高速公路路况查询石榴木命人公司起名大全渔业公司取名起名大全玩世不恭的意思武姓男孩起名简单大气淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化