爬取唐诗宋词生成词云
Python 高并发线程爬取诗词之诗词分析
本节所讲内容:
1、5分钟快速了解爬虫概念
2、beautifulsoup 匹配原则
3、wordcloud 使用详情
实战:爬取中国唐诗宋词,体验文人雅士最常用的词语!
1、5分钟快速了解爬虫
爬虫(spider:网络蜘蛛):是一个用脚本代替浏览器请求服务器获取服务器资源的程序。
数据收集(数据分析、人工智能)
模拟操作(测试、数据采集)
接口操作(自动化)
爬虫的原理:
说到底,我们的爬虫是模拟web请求,不论学习什么框架我们都需要对http协议的请求和响应有所了解:
简单的了解一下这幅图。
2、beautifulsoup 匹配原则
如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Beautiful Soup,有了它我们可以很方便地提取出HTML或XML标签中的内容,实在是方便,这一节就让我们一起来感受一下Beautiful Soup的强大吧。
什么是Beautiful Soup
简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。
官方解释如下:
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
2.1 bs的安装
环境介绍: pycharm 2017.2.3 + python 3.5.0
Pip install bs4
首先必须要导入 bs4 库, 创建BeautifulSoup对象
from bs4 import BeautifulSoup as BS text = ''' <html> <head><meta = charset='UTF-8' ><title id =1 href = 'http://example.com/elsie' class = 'title'>Test</title> </head> <body><div class = 'ok'><div class = 'nice'><p class = 'p'>Hello World</p><p class = 'e'>风一般的男人</p></div></div> </body> </html> ''' soup = BS(text,"lxml")#前面是要解析的内容,后面是指定的解析器print(soup.prettify())#转换字符串print(type(soup.prettify())) print(type(soup))
2.2.2 搜索文档树
find()和find_all()
find_all()方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件。
find()和find_all()的区别就是,find直接返回元素的一个结果,find_all返回元素列表
find_all( name , attrs , recursive , text , **kwargs )简介一下参数
name 参数可以查找所有名字为name的tag,字符串对象会被自动忽略掉;name参数可以传入字符串、正则表达式、列表、True、自定义的方法等但是各自代表的含义不一样。
字符串,在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容。
print(soup.find('body'))
print(soup.find_all('body')
如果匹配成功将会匹配所有的tag
如果一个指定名字的参数不是搜索内置的一些参数名,搜索时会把该参数当作指定名字tag的属性来
搜索;例如id=1
如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性;
如果传入 href 参数,Beautiful Soup会搜索每个tag的”href”属性;
使用多个指定名字的参数可以同时过滤tag的多个属性;
对于class ,可以使用class_来搜索
#返回这个class=‘p’的标签内容。
print(soup.find_all('p',class_='p'))
对于某些tag属性不能通过搜索得到值,可以使用attrs参数得到
#返回class为e的标签
print(soup.find_all(attrs={'class':'e'}))
3、wordcloud 使用详情
wordcloud 简单利用英语来看就是词云,它是以词语为基本单位,更加直观的展示出我们的内容。
wordcloud 的安装
pip install wordcloud
大家顺便安装下:pip install jieba
1、基本格式
#导入词云from wordcloud import WordCloud#打开文件并且读取完全f = open('1.txt','r').read()#创建wc设个实例对象,里面可传递相应的参数#generate根据文本生成词云wc = WordCloud(background_color='white',width=500,height=366,margin=2).generate(f)#to_file 输出到文件wc.to_file('./image/0.jpg')
3、wordcloud 使用详情
wordcloud 简单利用英语来看就是词云,它是以词语为基本单位,更加直观的展示出我们的内容。
wordcloud 的安装
pip install wordcloud
大家顺便安装下:pip install jieba
1、基本格式
#导入词云from wordcloud import WordCloud#打开文件并且读取完全f = open('1.txt','r').read()#创建wc设个实例对象,里面可传递相应的参数#generate根据文本生成词云wc = WordCloud(background_color='white',width=500,height=366,margin=2).generate(f)#to_file 输出到文件wc.to_file('./image/0.jpg')
实战:爬取中国唐诗宋词,体验文人雅士最常用的词语!
第一步:下载中国的唐诗宋词
第二步:把数据保存到本地
第三步:结巴分词
第四步:生成词云简单分析
代码如下:
下载唐诗宋词保存本地
# -*- coding: utf-8 -*-
# @Time : 2019/2/25 10:23
# @Author : for
# @File : test01.py
# @Software: PyCharm
import re
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
#这是url地址
urls = ['https://so.gushiwen.org/gushi/tangshi.aspx',
'https://so.gushiwen.org/gushi/sanbai.aspx',
'https://so.gushiwen.org/gushi/songsan.aspx',
'https://so.gushiwen.org/gushi/songci.aspx'
]
#处理获取每个诗词的url地址
poem_links = []
for url in urls:
# 请求头部
ua = UserAgent()
headers = {'User-Agent': ua.random}
req = requests.get(url, headers=headers)
#把爬取到的文本格式改成bs4可改变的格式
soup = BeautifulSoup(req.text, "lxml")
#定位到第一个class = sone的内容
content = soup.find_all('div', class_="sons")[0]
#获取该content 下所有a标签
links = content.find_all('a')
print(links)
#进行比遍历,url地址拼接
for link in links:
poem_links.append('https://so.gushiwen.org'+link['href'])
poem_list = []
def get_poem(url):
# 请求头部
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'}
req = requests.get(url, headers=headers)
soup = BeautifulSoup(req.text, "lxml")
poem = soup.find('div', class_='contson').text.strip()
poem = poem.replace(' ', '')
poem = re.sub(re.compile(r"\([\s\S]*?\)"), '', poem)
poem = re.sub(re.compile(r"([\s\S]*?)"), '', poem)
poem = re.sub(re.compile(r"。\([\s\S]*?)"), '', poem)
poem = poem.replace('!', '!').replace('?', '?')
poem_list.append(poem)
# 利用并发爬取
executor = ThreadPoolExecutor(max_workers=10) # 可以自己调整max_workers,即线程的个数
# submit()的参数: 第一个为函数, 之后为该函数的传入参数,允许有多个
future_tasks = [executor.submit(get_poem, url) for url in poem_links]
# 等待所有的线程完成,才进入后续的执行
wait(future_tasks, return_when=ALL_COMPLETED)
# 将爬取的诗句写入txt文件
poems = list(set(poem_list))
poems = sorted(poems, key=lambda x:len(x))
print(poems)
for poem in poems:
poem = poem.replace('《','').replace('》','').replace(':', '').replace('“', '')
print(poem)
with open('poem.txt', 'a',encoding='utf-8') as f:
f.write(poem)
f.write('\n')
结果展示:
生成词云进行分析:
import jieba
from wordcloud import WordCloud,STOPWORDS
wc = WordCloud(background_color='white', # 背景颜色
max_words=1000, # 最大词数
# mask=back_color, # 以该参数值作图绘制词云,这个参数不为空时,width和height会被忽略
max_font_size=100, # 显示字体的最大值
stopwords=STOPWORDS.add('国'), # 使用内置的屏蔽词,再添加'苟利国'
# font_path="C:/Windows/Fonts/STFANGSO.ttf", # 解决显示口字型乱码问题,可进入C:/Windows/Fonts/目录更换字体
font_path='C:\Windows\Fonts\simfang.ttf',
random_state=42, # 为每个词返回一个PIL颜色
# width=1000, # 图片的宽
# height=860 #图片的长
)
text = open('poem.txt').read()
# 该函数的作用就是把屏蔽词去掉,使用这个函数就不用在WordCloud参数中添加stopwords参数了
# 把你需要屏蔽的词全部放入一个stopwords文本文件里即可
def stop_words(texts):
words_list = []
word_generator = jieba.cut(texts, cut_all=False) # 返回的是一个迭代器
for word in word_generator:
words_list.append(word)
print(words_list)
return ' '.join(words_list) # 注意是空格
text = stop_words(text)
wc.generate(text)
# 显示图片
wc.to_file('maikou.png')
效果展示
转载于:https://www.cnblogs.com/zydev/p/10959210.html
爬取唐诗宋词生成词云相关推荐
- python爬取微博数据词云_用Python爬取微博数据生成词云图片
原标题:用Python爬取微博数据生成词云图片 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数 ...
- python爬取豆瓣影评生成词云的课程设计报告_简单爬取《小丑》电影豆瓣短评生成词云...
导语 在前段时间看了杰昆菲尼克斯的小丑电影,心里很好奇大部分观众看完这部电影之后对此有什么评价,然后看了看豆瓣短评之后,觉得通过python把短评中出现最多的单词提取出来,做成一张词云,看看这部电影给 ...
- 爬虫爬取新闻并生成词云
爬取豆瓣应用的函数同样可以用来爬取新闻.这里面主要是正则表达式的提取和对爬出的链接再进行爬取解析.对网页不 import re # 正则 from bs4 import BeautifulSoup # ...
- python爬取豆瓣影评生成词云的课程设计报告_Python爬取豆瓣影评,生成词云图,只要简单一步即可实现。...
最近看了一部电影<绣春刀>,里面的剧情感觉还不错,本文爬取的是绣春刀电影的豆瓣影评,1000个用户的短评,共5W多字.用jieba分词,对词语的出现频率进行统计,再通过wordcloud生 ...
- Python3.6+jieba+wordcloud 爬取豆瓣影评生成词云
在上一篇介绍了如何通过Python爬虫抓取豆瓣电影榜单.Python3.6+Beautiful Soup+csv 爬取豆瓣电影Top250 此篇博客主要抓取豆瓣某个电影的影评,利用jieba分词和wo ...
- python爬取歌词并生成词云图
第一部分:爬取数据 # 第一部分:爬取数据 import requests import re import os import json from bs4 import BeautifulSoup# ...
- Python 爬取京东商品评论 + 词云展示
利用python爬虫爬取京东商品评论数据,并绘制词云展示. 原文链接:https://yetingyun.blog.csdn.net/article/details/107943979 创作不易,未经 ...
- 爬虫——爬取人民网数据生成词云图
1.以人民网的新闻数据为例,简单介绍的利用python进行爬虫,并生成词云图的过程. 首先介绍python的requests库,它就好像是一个"爬手",负责到用户指定的网页上将所需 ...
- 英雄联盟《双城之战》视频弹幕爬取并分析输出词云
目前,拳头制作的英雄联盟首部动画作品<双城之战>在腾讯视频独家播出.而事实再次证明,拳头是一家被游戏耽误的动画公司,<双城之战>首映非常成功,豆瓣评分9.2,5星评价占67.5 ...
最新文章
- python数据分析书单排行_数据分析有哪些好书值得推荐?
- 始终在新标签页中打开文件
- 首届世界CSS设计大赛结果揭晓
- db29.7时间格式化为时间到时分秒_python基础系列 | 示例讲解时间模块datetime
- 在xcode上把你的app多语言国际化(NSLocalizedString)
- 按 结构记录的 相关字段 快速排序
- IBASE Header change - access sequence
- Java通过HighCharts导出图表
- jvm需要多长时间才能进行转义分析? 可能比您想象的要长。
- ubuntu 修改旋转屏幕显示方向 恢复正常模式
- LeetCode 1383. 最大的团队表现值(贪心,优先队列,难)
- 最大字段和---C语言实现
- 【zoj2314】Reactor Cooling 有上下界可行流
- 2018蚂蚁金服NLP用户意图的精准识别,复赛f1 = 0.7327
- ubuntu基础和来源
- 优化理论08-----约束优化的最优性条件、拉格朗日条件、凸性、约束规范、二阶最优性条件(下)
- gsp计算机设施设备表格,GSP计算机系统内审表.doc
- LeetCode:合并两个有序数组
- python图像的手绘效果代码_Python项目1:实现将图片转化为手绘效果
- 记一次win7 配置Windows Update 失败,还原更改,无法进入系统
热门文章
- 基于asp.net的员工出差管理信息系统#毕业设计#课程设计
- Elasticsearch教程(17) 返回结果过滤 _source_includes和_source_excludes使用
- python sklearn实现电力负荷区间预测
- Don’t Forget the I/O When Allocating Your LLC ISCA 2021
- unity 2d怪物随机移动(隔一段时间随机切换移动向量)
- 如何选择一款好用的物业管理软件?快鲸物业管理软件是不二之选
- JTAG and Boundary Scan(zz)
- 奈飞强制1080P播放配置教程
- L7和mapbox结合使用的案例2
- 2021年LED透明屏发展趋势前景展望