理清爬虫思路:
首先 爬取 B 站评论数据
其次 做一个词云图分析
-
第一步:观察评论数据
打开 B 站 UP 主 「电影最 TOP
」
找到一期关于的 ·「星爷
」·视频
我们打开检查界面,可以查出评论的文件在
我们拿到评论地址的 urlurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=39858896’
打开这个 url 地址(如下图)
所以我们爬虫就找到了目的地 -
第二步:开始爬虫
(1).定义请求 url 的函数
def web_get_pages(url):
browser = webdriver.Chrome()
browser.get(url)
# 这里睡 3 秒,大家可以自己取实验一下,打开我们的 url 的时候,有点卡顿
# 所以睡了三秒
time.sleep(3)
html = browser.page_source
return html
(2).定义用 beautifulsoup 解析网页的函数
def parse_pages(url):
# response = get_page(url)
html = web_get_pages(url)
soup = bf(html, 'lxml')
print ("sucess to parse")
return soup
(3).定义 储存评论的 txt 函数
def save_to_file(lists):
# 文件地址自己定义
with open('//comment.txt', 'a') as txt:
for list in lists:
txt.write(str(list.string)+"\n")
txt.close()
注意:
list.string是 ·「关注了,因为星爷」·
而 list 则是 ·「<span class="text">关注了,因为星爷</span>」.
这个问题曾经把握难住了很久,直到现在我才知道用 .string
的方法将<span class="text">关注了,因为星爷</span>
提取出来内容
(4).定义 选择评论 函数
def main(url):
soup = parse_pages(url)
# 选择所有 span 节点 并且 class 属性为 text 的内容
lists = soup.find_all("span", class_="text")
save_to_file(lists)
- 第三步:生成词云图
def create_words_picture():
texts = open('/home/yiyang/PycharmProjects/bilibili_comment/comment.txt', 'r')
texts = texts.readlines()
text = ""
for txt in texts:
text += str(txt)
cut_text = jieba.cut(text)
result = "/".join(cut_text) # 必须给个符号分隔开分词结果来形成字符串,否则不能绘制词云
# print(result)
# 3、生成词云图,这里需要注意的是WordCloud默认不支持中文,所以这里需已下载好的中文字库
# 无自定义背景图:需要指定生成词云图的像素大小,默认背景颜色为黑色,统一文字颜色:mode='RGBA'和colormap='pink'
font_path = r"/home/yiyang/PycharmProjects/bilibili_comment/simheittf/simhei.ttf"
wc = WordCloud(
font_path=font_path, background_color='white', width=800,
height=600, max_font_size=50,
max_words=1000) # ,min_font_size=10)#,
# mode='RGBA',colormap='pink')
wc.generate(result)
wc.to_file(r"/home/yiyang/PycharmProjects/bilibili_comment/comment.png") # 按照设置的像素宽高度保存绘制好的词云图,比下面程序显示更清晰
# 4、显示图片
plt.figure("词云图") # 指定所绘图名称
plt.imshow(wc) # 以图片的形式显示词云
plt.axis("off") # 关闭图像坐标系
plt.show()
补充:
import requests
import time
from bs4 import BeautifulSoup as bf
from selenium import webdriver
from config import *
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud
font_path = r"/home/yiyang/PycharmProjects/bilibili_comment/simheittf/simhei.ttf"
需要自己下载中文字体 simhei