导入:

最近突然觉得,在生活中可以看到很多与词云类似的图片,(不知道是不是我的个性化广告,哈哈哈)总之,闲来无事,自己也写一个代码来生成词云。
用什么数据来生成呢?再三回忆,突然想起了之前有一个网络流行词的网站: 小鸡词典

里面不仅有热词,还有对应的解释,以及点赞数,这次的主要目的不是爬虫而是词云,所以我会用点赞数来作为对应热词的值。


分析及代码:

首先打开网站首页用开发者工具抓包并构造请求头:

header = {'Host': 'jikipedia.com','Connection': 'keep-alive','Origin': 'https://jikipedia.com','Referer': 'https://jikipedia.com/','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
}

经过查看源码可以看到,初次打开网页时会默认加载 20 条数据。也就是 20 个流行词,仅仅20条数据怎么够,于是我们要先研究一下其余的数据是怎么加载的。

当我们向下滑动鼠标滚轮时发现,出现了以下的提示:到这里我们就不能再滑动了,但是当我们 登上账号 后就可以看到,我们可以永无止境的向下滑动,而且每次都是加载 20 条数据。

最开始我还以为当我们向下滑动时,会再次请求一个链接,类似于翻页操作,这就很简单了啊。
虽然当我去检查抓包时,确实发现了如下图的数据,的确是重新请求了一个链接,不过这里又出现了问题:

我们可以看到,浏览器先发送一个 OPTIONS 请求,得到回复:Message: {“title”:“OPTIONS”,“content”:“收到了OPTIONS请求”} 后再次向同一个网址发送了一个 POST 请求。这才得到了新加载的 20 条数据。


到这里,我们是否还需了解一下 OPTIONS 1 请求?
其实啊,完全不用,这里有个特殊情况:细心的你应该会发现,该网站是基于大数据的,会自动给你推送流行词,所以每一次请求主页都会得到不同的 20 条数据 。
这下我们就只需要写出如何抓取主页的 20 条数据就行了。

注意项:

  • 由于要进行模拟登录,所以还要添加请求头 ‘Cookies’ 字段。
  • 由于要多次请求网页,所以将请求连接写成函数。
  • 由于有些流行词才刚发布,点赞数为0,但是在网页中它是以 ‘ ’(空格)的形式存在的,所以一旦遇到这种情况要将 ‘ ’(空格)改为 0。
def request(url):try:proxies = {'http': random.choice(proxy)}r = requests.get(url=url, headers=header, proxies=proxies)r.raise_for_status()r.encoding = 'utf-8'return rexcept:print("请求失败!")def fun(url):likes = []html = request(num2, url).textwords = parsel.Selector(html).xpath('//a[@class="card-content"]//strong/text()').extract()like_html = parsel.Selector(html).xpath('//div[@class="like button hoverable"]').extract()for li in like_html:like = parsel.Selector(li).xpath('//div/text()').extract()[-1]if like != ' ':  likes.append(like)else:likes.append(0)for num in range(20):data[words[num]] = int(likes[num])
画词云:

基本功能都已经实现,虽然还是有一点小调整,但是我要留在后面来说为什么。
数据现在已经有了,接下来就是画词云了:
首先导入画词云所需要的模块:

import numpy
import wordcloud
import matplotlib.pyplot as plt

wordcloud 模块只负责生成词云的数据
matplotlibpyplot 类才负责把词云画出来
安装时只需要输入命令: pip install wordcloud ,它会自动将两个模块都安装好。(wordcloud 模块依赖于 matplotlib 模块)

写出关键代码:(详注解)

def draw():mask1 = numpy.array(PIL.Image.open('./Desktop/123.jpg')) #词云形状目录wcloud = wordcloud.WordCloud(background_color='white', mask=mask1, font_path='‪C:/Windows/Fonts/STXINGKA.TTF') #创建了一个词云(不支持中文,指定字体,不然就是乱码())wcloud.generate_from_frequencies(frequencies=data) #以频率(点赞数)为标准生成词云plt.figure(dpi=1200)  plt.imshow(wcloud, interpolation='bilinear') # 显示内容 (bilinear 点阵方式:二维)plt.axis('off')  #关闭坐标显示plt.show()  #显示

选用以下图片作为模型,可以画出一个和开篇一样的爱心词云。

由于该网站的反爬机制,会封掉短时间内频繁访问的 IP (起码不是人的速度)和当前登录的账号,导致以后即使更换了 IP 登上账号以后还是不能访问该网站。
所以在请求代码的位置尽量多休眠几秒。
如果每次请求都要休眠几秒钟,那我请求 100 次呢?1000 次呢?… 总不可能为了用多一点的数据来画词云,就要在电脑前一直等着吧!
所以我使用了一个告警系统,可以通过微信来提示我的词云生成情况:成功或某一次请求失败!

def warning(num1, flag=1):  # 0  失败    1  成功par = {"num": str(num1)}if flag == 1:temp = '477464252017283072'  //成功时的匹配码else:temp = '477464742239145984'    //失败时的匹配码Parameters = {       //告警参数'secretKey': '********************************','appCode': '477462730265071616','templateCode': temp,'params': quote(str(par))}URL = 'https://api.*******.com/api/alarm'r = requests.get(URL, params=Parameters)print(r.text)

源码及结果:

import PIL
import time
import numpy
import tqdm
import random
import parsel
import requests
import wordcloud
import matplotlib.pyplot as plt
from urllib.parse import quoteheader = {'Host': 'jikipedia.com','Connection': 'keep-alive','Origin': 'https://jikipedia.com','Referer': 'https://jikipedia.com/','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36','Cookie': '填写自己的 Cookies '
}
proxy = ['HTTP://106.42.216.132:9999', 'HTTP://115.221.242.206:9999', 'HTTP://163.204.245.77:9999','HTTP://125.110.93.8:9000', 'HTTP://175.43.59.50:9999', 'HTTP://120.83.99.101:9999','HTTP://171.11.178.229:9999', 'HTTP://123.169.168.66:9999', 'HTTP://122.4.43.151:9999','HTTP://122.243.8.64:9000', 'HTTP://1.197.204.239:9999', 'HTTP://163.204.247.121:9999','HTTP://59.62.25.154:9000', 'HTTP://39.96.220.231:8888', 'HTTP://163.204.242.255:9999','HTTP://113.195.17.111:9999', 'HTTP://163.204.246.180:9999', 'HTTP://110.243.31.197:9999','HTTP://114.224.223.164:9999', 'HTTP://125.108.78.245:9000', 'HTTP://120.83.98.217:9999','HTTP://112.84.98.40:9999', 'HTTP://122.4.42.59:9999']data = {}
num1 = 100def request(num2, url):try:proxies = {'http': random.choice(proxy)}r = requests.get(url=url, headers=header, proxies=proxies)r.raise_for_status()r.encoding = 'utf-8'return rexcept:warning(num2, 0)def fun(num2, url):likes = []try:time.sleep(3)html = request(num2, url).textwords = parsel.Selector(html).xpath('//a[@class="card-content"]//strong/text()').extract()like_html = parsel.Selector(html).xpath('//div[@class="like button hoverable"]').extract()for li in like_html:like = parsel.Selector(li).xpath('//div/text()').extract()[-1]if like != ' ':likes.append(like)else:likes.append(0)for num in range(20):data[words[num]] = int(likes[num])except:warning(num2, 0)def draw():mask1 = numpy.array(PIL.Image.open('./Desktop/123.jpg'))wcloud = wordcloud.WordCloud(background_color='white', mask=mask1, font_path='‪C:/Windows/Fonts/STXINGKA.TTF')wcloud.generate_from_frequencies(frequencies=data)plt.figure(dpi=1200)plt.imshow(wcloud, interpolation='bilinear')plt.axis('off')plt.show()def warning(num1, flag=1):  # 0  失败    1  成功par = {"num": str(num1)}if flag == 1:temp = '477464252017283072'else:temp = '477464742239145984'Parameters = {'secretKey': '**************************','appCode': '477462730265071616','templateCode': temp,'params': quote(str(par))}URL = 'https://api.******.com/api/alarm'r = requests.get(URL, params=Parameters)print(r.text)if __name__ == '__main__':url = 'https://jikipedia.com/'for num in tqdm.tqdm(range(num1),desc="正在统计:"):fun(num, url)warning(num1)draw()

结果:

正在统计:: 100%|██████████| 100/100 [07:37<00:00,  4.02s/it]
{"code":"200","data":null,"message":"SUCCESS"}


  1. OPTIONS 请求方法的主要用途有两个:
    1)获取服务器支持的HTTP请求方法;
    2)用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。 ↩︎

Python爬虫:爬取网络流行词制作词云相关推荐

  1. 使用Python爬虫爬取网络美女图片

    代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...

  2. python爬取B站评论制作词云

    python爬取B站评论制作词云 江山代有才人出,B站评论占一半 废话不多说,咱们直接上代码` import imageio import jieba import wordcloud import ...

  3. python爬虫爬取网络小说

    近日沉迷网络小说不能自拔的某人让我趁着网站限免把她想看的小说爬取下来,免得到时候又要付费看书,本来对于这种又要看正版又想占便宜不给钱的行为的我是深恶痛绝的,然而...为了小命我还是做一下吧.     ...

  4. python怎么爬取知乎回答并制作词云_使用python爬取流浪地球影评并制作词云,看看别人都说了些说什么...

    流浪地球影评爬取 大过年的,蹭个热度,看完电影后爬一下影评并作出词云. 本次影评取自豆瓣: https://movie.douban.com/subject/26266893/ 抓包 首先是拿到访问的 ...

  5. 搞个好玩的东西,爬虫爬取网络流行语录,并通过python自动发送给qq好友,实现有技术的刷屏哈哈。

    首先我们需要爬虫的模块函数and python的win32库. 这里我们以郭老师语录为例 import win32gui import win32con import win32clipboard a ...

  6. 如何用python爬虫爬取网络小说?

    这里是17K小说网上,随便找了一本小说,名字是<千万大奖>. 里面主要是三个函数: 1.get_download_url() 用于获取该小说的所有章节的URL. 分析了该小说的目录页htt ...

  7. 爬取微博热搜制作词云

    人工智能的训练需要样本,大量采集样本单靠人力是不现实的,一是利用规则生成带标签的数据,二就是在网上电脑自动获取了 今天我就来小试一下 目录 爬取热搜数据 1.找到数据位置 2.爬取网页 1.初试 2. ...

  8. itchat爬取朋友圈签名制作词云

    占坑 参考:http://blog.csdn.net/zhanshirj/article/details/74166303

  9. 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...

    [爬虫]利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2) 第一篇( http://blog.itpub.net/26736162/viewspace-22865 ...

最新文章

  1. 熬夜翻译完的PureFTPd配置文件
  2. 2021年春季学期-信号与系统-第四次作业参考答案-第十一小题
  3. Qt / Moc 和信号 - 槽解析
  4. P2168 [NOI2015] 荷马史诗(哈夫曼编码树)
  5. 统计字符串每个字符出现的次数
  6. lumanager mysql密码_LuManager单独安装mysqli
  7. php装饰器模式 简书,装饰器模式/包装器模式
  8. 让你页面速度飞起来的前端性能优化方案
  9. 任正非:HR面试不深刻导致大规模进人、走人,耽误人家几年对得起人家吗?...
  10. 三屏设置相关技术收集
  11. 51单片机按键控制数码管0~9_基于proteus的51单片机开发实例24-矩阵键盘(行列式键盘)...
  12. 信息学奥赛一本通1368 对称二叉树
  13. 打开计算机显示远程控制,win7系统远程协助怎么打开?开启远程协助功能教程...
  14. 【机器学习】特征工程的最佳实践
  15. 一个程序小白的大胆尝试 (鸡汤)
  16. PMP复习整理考点篇【12】--- 激励理论
  17. 拼多多推广没用怎么办?
  18. 全国天气预报信息数据接口 API
  19. 【转载】如果你是ACMer,你会选择哪个职业?(来自shǎ崽)
  20. Python 3 字符串 strip( ) 方法

热门文章

  1. 自定义一个时钟的显示效果
  2. 跑胡子程序开发记录(四)——阶段性总结
  3. android x86 win8平板,如何设置win8及android x86平板板及注意事项
  4. 数据结构:哈夫曼树【转载自mcgrady https://www.cnblogs.com/mcgrady/p/3329825.html#_label0】
  5. 正在配置您的计算机,解决方案:Win10系统正在配置Windows Update并停留在100%,如何解决...
  6. Unity 图片渐变色的实现
  7. 【VUE】基础用法(属性与事件的绑定,条件渲染等)
  8. 他跟随下海潮,公司上市九个月市值一路飙升
  9. Opencv学习----位图(bitmap)原理详解五---位图存储
  10. 电脑的屡次黑屏原因为:CPU中央处理器利用率达到了100%并持续了多秒从而导致