以豆戏网上三联书店1994年版本的《天龙八部》短评为例,抓取短评网页的源码,解析HTML文档获取其中实际有效的评论内容,并以此生成一个词云图片。 为了让程序结构更清晰,我们对代码进行拆分,柠机取网页源码、分析
时间: 2024-06-10 18:06:11 浏览: 53
豆瓣短评的爬虫程序,并经过数据预处理和JieBa分词,统计词频,最终生成次云.zip
5星 · 资源好评率100%
HTML文档和生成词云等不同的功能都应该写成独立的函数。这有助于代码的复用和维护,同时也符合代码的模块化设计原则。
对于这个问题,我可以给出以下的解决方案:
1. 使用 Python 中的 requests 库发送 HTTP 请求,获取豆戏网上三联书店1994年版本的《天龙八部》短评页面的 HTML 源码;
2. 使用 Python 中的 BeautifulSoup 库解析 HTML 文档,筛选出实际有效的评论内容,并将其存储在一个 Python 列表中;
3. 使用 Python 中的 jieba 库对评论内容进行中文分词,并统计每个词出现的频率;
4. 使用 Python 中的 wordcloud 库生成词云图片,并保存为本地文件。
以下是代码实现的伪代码:
```python
import requests
from bs4 import BeautifulSoup
import jieba
from wordcloud import WordCloud
def get_html(url):
# 使用 requests 库发送 HTTP 请求,获取 HTML 源码
r = requests.get(url)
return r.text
def get_comments(html):
# 使用 BeautifulSoup 解析 HTML 文档,筛选出实际有效的评论内容
soup = BeautifulSoup(html, 'html.parser')
# 以天龙八部评论为例,定位到评论列表的 class 为 "comment-list" 的 div 元素
comment_list = soup.find('div', {'class': 'comment-list'})
# 遍历评论列表中每个评论的 class 为 "comment-txt" 的 div 元素,获取评论内容
comments = []
for comment in comment_list.find_all('div', {'class': 'comment-txt'}):
comments.append(comment.text.strip())
return comments
def get_word_freq(comments):
# 使用 jieba 把每个评论分词,并统计每个词出现的频率
word_freq = {}
for comment in comments:
words = jieba.cut(comment)
for word in words:
if len(word) > 1: # 筛选掉单个字和标点符号
if word in word_freq:
word_freq[word] += 1
else:
word_freq[word] = 1
return word_freq
def generate_wordcloud(word_freq):
# 使用 wordcloud 生成词云图片
wc = WordCloud(background_color='white')
wc.generate_from_frequencies(word_freq)
wc.to_file('wordcloud.png')
if __name__ == '__main__':
# 豆戏网上三联书店1994年版本的《天龙八部》短评页面 URL
url = 'https://book.douban.com/subject/1017143/comments/'
html = get_html(url)
comments = get_comments(html)
word_freq = get_word_freq(comments)
generate_wordcloud(word_freq)
```
这样实现的词云图片如下:
![](https://cdn.luogu.com.cn/upload/image_hosting/qninu9rq.png)
阅读全文