关键词:requests,BeautifulSoup,jieba,wordcloud

整体思路:通过requests请求获得html,然后BeautifulSoup解析html获得一些关键数据,之后通过jieba分词对数据进行切分,去停,最后通过wordcloud画词云图

1、请求虎扑Acg区

Acg区首页的url为:https://bbs.hupu.com/acg

Acg区第二页的url为:https://bbs.hupu.com/acg-2

从这里可以得知,如果我们要请求多个网页,只需要以首页作为基础url,后面的每一页在首页的url基础上进行添加即可。引入requests库进行请求

base_url = r'https://bbs.hupu.com/acg'
add_url = ''
content_str = ''
# 尝试请求15个网页
for i in range(1, 15):
if i != 1:
add_url = r'-{}'.format(i)
else:
add_url = ''
url = base_url + add_url
response = requests.get(url)

2、BeautifulSoup解析

打开浏览器的控制台,观察网页源码,寻找需要获得的数据的标签。我们需要获取一个帖子的标题,通过浏览网页源码可以发现帖子的标题在一个<a></a>标签中,且class=“truetit”,通过这两个信息我们就可以通过BeautifulSoup获取一个帖子的标题了。

base_url = r'https://bbs.hupu.com/acg'
add_url = ''
content_str = ''
for i in range(1, 15):
if i != 1:
add_url = r'-{}'.format(i)
else:
add_url = ''
url = base_url + add_url
response = requests.get(url)
# 引入BeautifulSoup
soup = BeautifulSoup(response.text, "lxml")
# 找<a></a>标签,class = ‘truetit’
all_title = soup.find_all("a", class_="truetit")
for title in all_title:
content_str += title.text

需要注意的是,

all_title = soup.find_all("a", class_="truetit")

会把当前网页的所有标题都读出来,且格式是一个以<a></a>标签为元素的list,通过for遍历这个list,对每一个<a></a>,调用title.text即可以获得帖子的标题。

print一下,查看是不是获得了想要的结果:

可以看到我们已经获得了我们想要的标题,下一步就是数据处理了(jieba分词+去停)

3、jieba分词+去停用词

先写一个生成停用词表的函数

# 引入停用词表
def stopwordslist(filepath):
stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]
return stopwords

再进行jieba分词,去停使用的是哈工大停用词表

# 用lcut使得分词后为一个list
s_list = jieba.lcut(content_str)
out_list = []
# 引入停用词表
stopwords = stopwordslist(r'E:\stopwords-master\哈工大停用词表.txt')
for word in s_list:
if word not in stopwords:
if word != '\t':
out_list.append(word)
out_str = " ".join(out_list)

到这一步,就可以获得分词后的关键词了。下一步就是画词云图了。

4、画词云图

引入wordcloud,font_path是字体的路径,不导入的话可能只会显示一些框框,具体文字下载可以去网上找。mask是背景图片。generate()里的是string类型的数据。

alice_mask = plt.imread(r'D:\壁纸\huge.jpg')
# generate的是string类型的
word_cloud = WordCloud(font_path='msyh.ttc',mask=alice_mask,background_color='white', max_words=400, max_font_size=80).generate(out_str)
plt.figure(figsize=(15,9))
plt.imshow(word_cloud, interpolation="bilinear")
plt.axis('off')
plt.show()

5、结果展示

不引入mask参数:

引入mask参数:

今天是8月8号,最近正好是巨人最新一话发布的时候,所以巨人的讨论度很高。同时一直支撑着虎扑acg区热度的海贼王讨论度也很高,其次的关键词还有 动画,动漫,龙珠,艾伦,漫画,情报等等。

6、需要改进的地方

(1)无关紧要的词太多了,需要自写停用词表进行去停。如最后结果中的“是不是”,“觉得”等,这些词都应该去掉

(2)引入mask的情况下,很多背景图使用了最后却没有展示出来。有的背景图可以,有的却不可以。

最后,感谢观看这篇博客。其中借鉴了许多网上的内容,感谢一些原作者的努力。

python-2:爬取某个网页(虎扑)帖子的标题做词云图的更多相关文章

  1. 一、python简单爬取静态网页

    一.简单爬虫框架 简单爬虫框架由四个部分组成:URL管理器.网页下载器.网页解析器.调度器,还有应用这一部分,应用主要是NLP配合相关业务. 它的基本逻辑是这样的:给定一个要访问的URL,获取这个ht ...

  2. Python爬虫爬取百度贴吧的帖子

    同样是参考网上教程,编写爬取贴吧帖子的内容,同时把爬取的帖子保存到本地文档: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urlli ...

  3. 用python简单爬取一个网页

    1打开编辑器 2撸几行代码 import urllib.request import urllib.error def main(): askURl("http://movie.douban ...

  4. Python爬虫:爬取自己博客的主页的标题,链接,和发布时间

    代码 # -*- coding: utf-8 -*- """ ------------------------------------------------- File ...

  5. python连续爬取多个网页的图片分别保存到不同的文件夹

      python连续爬取多个网页的图片分别保存到不同的文件夹 作者:vpoet mail:vpoet_sir@163.com #coding:utf-8 import urllib import ur ...

  6. python爬取某个网页的图片-如百度贴吧

    python爬取某个网页的图片-如百度贴吧 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用告诉我 #coding:utf-8 import urllib imp ...

  7. Python 爬取单个网页所需要加载的地址和CSS、JS文件地址

    Python 爬取单个网页所需要加载的URL地址和CSS.JS文件地址 通过学习Python爬虫,知道根据正式表达式匹配查找到所需要的内容(标题.图片.文章等等).而我从测试的角度去使用Python爬 ...

  8. Python:将爬取的网页数据写入Excel文件中

    Python:将爬取的网页数据写入Excel文件中 通过网络爬虫爬取信息后,我们一般是将内容存入txt文件或者数据库中,也可以写入Excel文件中,这里介绍关于使用Excel文件保存爬取到的网页数据的 ...

  9. python爬虫——爬取网页数据和解析数据

    1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序.只要浏览器能够做的事情,原则上,爬虫都能够做到. 2 ...

随机推荐

  1. HEOI2016/TJOI2016 字符串问题

    题目链接:戳我 非常不好意思,因为想要排版,所以今天先只把代码贴出来,明天补题解. 40pts暴力:直接暴力匹配 #include<iostream> #include<cstrin ...

  2. 「CQOI 2014」危桥

    题目链接 戳我 \(Solution\) 首先往返\(n\)次等价于走\(2n\)次. 将 \(a_n*2,b_n*2\); 那么我们直接按原图构图,然后: \((S,a_1,a_n),(S,b_1, ...

  3. HTML功能框架

    起始预定义函数 function $(obj) { return document.getElementById(obj); } 1.用户登陆框架 <!DOCTYPE html> < ...

  4. CAN波特率设置

    通过对CAN位定时寄存器CANBIT以及CAN波特率预分频扩展寄存器CANBRPE的设置可以得到需要的CAN通信波特率. CAN的位定时配置不当,将使得CAN模块无法按照目标波特率接入CAN网络,将导 ...

  5. 利用开源SlidingMenu框架实现左右侧滑菜单的功能

    package com.loaderman.slidingmenudemo; import android.os.Bundle; import android.support.v4.app.Fragm ...

  6. nodejs之流数据读取与写入

    1.(fs.createReadStream)当文件比较大时,建议使用文件流读取,不会出现卡顿现象,demo如下. const fs = require('fs'); //流的方式读取文件 var r ...

  7. 为解决Thymeleaf数字格式化问题而想到的几种方案

    背景: spring后端输出double类型数据,前端使用thymeleaf框架,格式化double数据类型,由于需要显示原值(比如原来录入5,而不能显示5.00),因此需要存储数值(存储值为deci ...

  8. JMeter5.0核心源码浅析[转]

    [转自:https://blog.csdn.net/zuozewei/article/details/85042829] 源码下载地址:https://github.com/apache/jmeter ...

  9. Nginx正向代理、反向代理、负载均衡及性能优化

    一.Nginx是什么 Nginx是一款高性能的 HTTP 和反向代理服务器,由俄罗斯人Igor Sysoev(伊戈尔·赛索耶夫)为俄罗斯网站Rambler.ru开发的,在Rambler.ru网站平稳的 ...

  10. linux使用du查看文件夹大小

    du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为:du –sh -s不显示该目录下面的文件大小,只显示该目录的大小 -h以人类可读的方式显示. 比如显示work下面的Apache-tom ...