"知之为知之,不知为不知,是知也~",最近突然迷恋古诗词,体验下文人雅士,迁客骚人的生活,并跟随杜牧,李白感受下千百年前社会(给自己点赞~),不过突然我在想,这么多古诗,这么多作者,他们在写古诗的时候最喜欢的词语是啥子?来来来,让我们安排下~嘎嘎嘎~

1.  5分钟快速了解爬虫

爬虫(spider:网络蜘蛛):是一个用脚本代替浏览器请求服务器获取服务器资源的程序(简单不?)

当然,各位看官,肯定知道咱们的python爬虫能做什么吧,我就在这里简单的总结下子.

数据收集(数据分析、人工智能)

模拟操作(测试、数据采集)

接口操作(自动化)

爬虫的原理:说到底,我们的爬虫是模拟web请求,不论学习什么框架我们都需要对http协议的请求和响应有所了解,看下图:

             

用户去发送请求,给服务器,服务器这个碧池一看有用户请求我,我就回应,把自己的响应的数据发送给用户,并不要脸的把响应体发送给了用户,这里咱们做python爬虫的主要是想要拿到响应体,去蹂躏~嘎嘎嘎~

2.  beautifulsoup  匹配原则

什么是beautiful Soup?

简单来说:Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。

官方解释:Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

这里我不得不提醒下大家,我们爬虫常用的匹配有 re,xpath,bs。bs ,相比着前两种来说有点慢,嘿嘿~它的优点也有很多了,文档自动纠错啦,等等,大家不用怕,看工作需求~

2.1   bs的安装

环境介绍: pycharm 2018.2.3 + python 3.7.2 +windows

bs的安装 : 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    搜索文档树

说到bs了,咱们在这里就不得不提搜索文档树了,我们做爬虫主要做什么?无非就是提取数据啦,所以我们的bs肯定的有相对应的方法快速搜索咱们的响应体滴,从上往下,从头到脚,一个地方都不放过~(也可以具体选择某个地方),列德森and乡亲们来来,请出咱们的主角,find()和find_all()(自带bgm,啾~啾~啾~啾~~)

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会查找与字符串完整匹配的内容。

光说不练假把式,咱们废话不BB看下下面的具体代码段

1.  通过tag标签名:

print(soup.find('body'))

print(soup.find_all('body')

如果匹配成功将会匹配所有的tag

2.  通过具体的属性名

如果一个指定名字的参数不是搜索内置的一些参数名,搜索时会把该参数当作指定名字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'}))

ps:  bs 知识点我们略微的尝尝,当前所学的就够咱们今天用到滴,如果大家想深入美丽汤,可以去官方网站上呦~

博主到这个地方,冥思苦想,要想把湿人的词语,展示给小伙伴,到底用什么方法呢?matplotlib?echart? nonono~,我灵光一闪就它-wordcloud了,来来来,各位看官请移步到wordcloud简单讲解

3.  wordcloud 使用详情

wordcloud  简单利用英语来看就是词云,它是以词语为基本单位,更加直观的展示出我们的内容。

ps:既然是以词语为单位,肯定先事先准备些小词,还好博主平时看书比较多,肉铺,蜜桃……(杠杠滴)

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')

运行结果展示:

以上代码还有个小小的坑,看看大家能不能排除下,抖个小小的机灵~嘻嘻~

好了,上边说了这么多,下面终于进入主题了,我要放大给大家看看实战:爬取中国唐诗宋词,体验文人雅士最常用的词语,小小的实战送给各位亲~

首先,咳咳~允许我把大致的流程来列出来,我要一步步往上爬,在最高点……

第一步 : 下载中国的唐诗宋词

第二步:把数据保存到本地

第三步:结巴分词

第四步:生成词云简单分析

下载唐诗宋词保存本地

import re
import requests
from bs4 import BeautifulSoup
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:# 请求头部headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'}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') 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')

最终结果如下:

啧啧啧~这样看来,古人喜欢用 的无非就几个:何处,君王,清晨,古寺,人心,

是不是我也可以来一首诗,展示下我的渊博的学识,嘎嘎嘎~

人心不知何处去,君王真想不早朝。

清晨起床一脸懵,真想古寺得禅道。

完美,溜了溜了~

Python 爬取诗词分析古人最喜欢用的诗词相关推荐

  1. python爬取+BI分析5000条内衣数据,发现妹子最爱这款文胸

    生活中我们经常会用python进行数据爬取,但是爬取简单分析难,很多人喜欢用echarts图表接口或者是python的第三方库进行数据可视化,甚至是用matlab,基本上都需要用代码实现,在数据展示上 ...

  2. python爬取并分析淘宝商品信息

    python爬取并分析淘宝商品信息 背景介绍 一.模拟登陆 二.爬取商品信息 1. 定义相关参数 2. 分析并定义正则 3. 数据爬取 三.简单数据分析 1.导入库 2.中文显示 3.读取数据 4.分 ...

  3. 用Python爬取并分析了B站最热排行榜,我发现了这些秘密

    现在大家的生活中,已经越来越离不开B站了,2020年的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户.源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉丝的u ...

  4. python b站 礼物_用Python爬取并分析了B站最热排行榜,我发现了这些秘密

    现在大家的生活中,已经越来越离不开B站了,2020年的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户.源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉丝的u ...

  5. python 怎么爬桌软件数据_如何利用Python爬取并分析红岭创投的数据?

    第一步:爬取数据 通过 selenium + Firefox 的无头模式将需要的数据爬取出来,代码实现不在赘述,详细步骤可查看我的上一篇图文(如何利用Python爬取网易新闻), 由于 seleniu ...

  6. Python爬取、分析全球最美Top100女神榜单的数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 作者:菜鸟大叔 来源:程序员GitHub Python爬虫.数据分析.网站开发等案例教程视频免费在 ...

  7. 为什么这么火?用 Python 爬取并分析了《雪中悍刀行》数据,发现了其中的秘密

    大家好,今天本文我们对腾讯热播剧<雪中悍刀行>的一次爬虫与数据分析,总爬取条数1W条评论并对数据进行可视化分析,喜欢本文记得收藏,点赞.关注.需要进交流群可以文末进来. 干货推荐 Pyth ...

  8. 我用Python爬取并分析了30万个房产数据,带你看怎么做的

    学 Python 怎样才最快,当然是实战各种小项目.除了要学习Python的具体用法,更重要的是把它作为数据分析的一部分,学习数据分析思维模式,结合具体业务场景,提供业务指导(进而实现升职加薪)--这 ...

  9. 用Python爬取并分析Box Office Mojo网站2019年每日票房数据

    最近在处理一些和有关电影的工作,需要用到一些北美电影票房数据,而这部分数据最权威的网站当属Box Office Mojo(以下简称BOM),于是就上去查看了一下.估计经常关注这个网站的盆友们都知道,这 ...

最新文章

  1. Docker aufs存储驱动layer、diff、mnt目录的区别
  2. python 语言教程(3)变量之元组
  3. python类和对象介绍_python中的类,对象,方法,属性等介绍
  4. 使用eclipse生成文档(javadoc)
  5. swift自行车品牌介绍_品牌101:简介
  6. UNIX网络编程:I/O复用技术(select、poll、epoll)
  7. ffmpeg优化mp4以及hls参数设置
  8. online游戏服务器架构—用户登录数据组织 .
  9. [DC]学习design compiler
  10. python自动化办公要学多久-用 Python 自动化办公能做到哪些有趣或有用的事情?...
  11. 开始Unity3D的学习之旅
  12. 4.27 前端开发日报
  13. 快手用户群体分析_抖音、快手竞品分析报告
  14. 作曲大师2019破解版|作曲大师音乐梦想家2019破解版下载 v2019.9(附安装破解图文教程)
  15. uniapp ucharts统计图表
  16. Java 比较图片_Java图片比对
  17. 第 4-4 课:Spring Boot 中使⽤ Cache 缓存的使⽤
  18. 994. 腐烂的橘子 (广度探索)
  19. Day4-C语言计时器
  20. manjaro下常用软件一览

热门文章

  1. 【产品】产品认证项目
  2. 【ReID】Joint Discriminative and Generative Learning for Person Re-identification
  3. Python量化交易学习笔记(47)——因子扩展
  4. 酒店预定android代码,毕业设计(论文)-基于Android的酒店预定系统设计(全套源代码).doc...
  5. Oracle索引和分区索引
  6. SSL证书产品简介——SSL证书作用、类型,证书选择与购买
  7. 利用node2vec和k-means对图数据进行节点聚类分析
  8. 睿智的目标检测38——TF2搭建Efficientdet目标检测平台(tensorflow2)
  9. 三菱q系列 服务器,三菱中大型Q系列PLC介绍
  10. 【华为oj】字符串分割