大家好,我是小五????
生活真是太苦了,需要找点快乐的精神食粮支撑社畜生活,听说糗事百科段子挺多,今天就来看一看!
糗事百科的段子栏目声称:幽默笑话大全__爆笑笑话__笑破你的肚子的搞笑段子,我们用 Python 来看看糗事百科的段子到底怎么样呢?
本文主要内容:
selenium爬取段子信息
这次我们利用selenium来实现翻页爬取段子信息!
翻页查看url变化规律:
-
https:
//www.qiushibaike.com/text/page/1/
-
https:
//www.qiushibaike.com/text/page/2/
-
https:
//www.qiushibaike.com/text/page/3/
-
https:
//www.qiushibaike.com/text/page/4/
-
https:
//www.qiushibaike.com/text/page/5/
-
https:
//www.qiushibaike.com/text/page/6/
思路:段子信息在 id 为 content 的 div 标签下的 div 下的第二个 div 标签下的 div 标签里,获取到所有 div 标签的内容,然后遍历,从中提取出每一条段子信息。
代码如下:
-
from selenium
import webdriver
-
from time
import sleep
-
import logging
-
import openpyxl
-
-
wb = openpyxl.Workbook()
-
sheet = wb.active
-
sheet.
append([
'段子内容',
'好笑数',
'评论数'])
-
logging.basicConfig(level=logging.INFO, format=
'%(asctime)s - %(levelname)s: %(message)s')
-
-
chrome_driver = r
'D:\python\pycharm2020\chromedriver.exe'
-
-
options = webdriver.ChromeOptions()
-
# 可以设置无头模式 不弹出浏览器
-
# options.add_argument(
"--headless")
-
# 关闭左上方 Chrome 正受到自动测试软件的控制的提示
-
options.add_experimental_option(
'useAutomationExtension', False)
-
options.add_experimental_option(
"excludeSwitches", [
'enable-automation'])
-
browser = webdriver.Chrome(options=options, executable_path=chrome_driver)
-
# 可以设置绕过Webdriver的检测
-
browser.execute_cdp_cmd(
"Page.addScriptToEvaluateOnNewDocument", {
-
"source":
""
"
-
Object.defineProperty(navigator, 'webdriver', {
-
get: () => undefined
-
})
-
"
""
-
})
-
-
-
def get_data(page): # 爬取数据函数
-
url = f
'https://www.qiushibaike.com/text/page/{page}/'
-
browser.get(url) # 访问目标url
-
browser.maximize_window() # 最大化窗口
-
sleep(
1) # 短暂休眠
-
# Xpath定位到所有包含段子信息的div标签
-
items = browser.find_elements_by_xpath(
'//*[@id="content"]/div/div[2]/div')
-
#
print(
len(items)) 一页
25条段子
-
# 遍历 获取每一条段子信息
-
for item in items:
-
con = item.find_element_by_xpath(
'.//a/div/span').text # 段子内容
-
funny_num = item.find_element_by_xpath(
'.//div[2]/span[1]/i').text # 好笑数
-
comment_num = item.find_element_by_xpath(
'.//div[2]/span[2]/a/i').text # 评论数
-
sheet.
append([con, funny_num, comment_num])
-
logging.info([con, funny_num, comment_num])
-
-
-
if __name__ ==
'__main__':
-
for i in
range(
1,
14): # 翻页爬取
-
get_data(i)
-
browser.quit() # 关闭浏览器
-
wb.save(filename=
'datas.xlsx') # 保存数据
运行结果如下:
段子信息保存到了本地 Excel 里,结果如下:
绘制词云图
段子内容词云图可视化
-
import pandas as pd
-
import jieba
-
import collections
-
import re
-
from wordcloud
import WordCloud
-
import matplotlib.pyplot as plt
-
-
# 读取段子数据
-
datas = pd.read_excel(
'datas.xlsx')[
'段子内容']
-
-
# 读取停用词数据
-
with open(
'stop_words.txt', encoding=
'utf-8') as f:
-
con = f.read().split(
'\n') # 得到每一行的停用词
-
stop_words = set()
-
for i in con:
-
stop_words.add(i)
-
-
result_list = []
-
for data in datas:
-
# 文本预处理 去除一些无用的字符 只提取出中文出来
-
new_data = re.findall(
'[\u4e00-\u9fa5]+', data, re.S)
-
new_data =
"/".join(new_data)
-
# 文本分词
-
seg_list_exact = jieba.cut(new_data, cut_all=True)
-
# 去除停用词和单个词
-
for word in seg_list_exact:
-
if word not in stop_words and
len(word) >
1:
-
result_list.
append(word)
-
-
print(result_list)
-
# 筛选后统计
-
word_counts = collections.Counter(result_list)
-
-
# 绘制词云
-
my_cloud = WordCloud(
-
background_color=
'white', # 设置背景颜色 默认是black
-
width=
800, height=
550,
-
font_path=
'simhei.ttf', # 设置字体 显示中文
-
max_font_size=
160, # 设置字体最大值
-
min_font_size=
16, # 设置字体最小值
-
random_state=
88 # 设置随机生成状态,即多少种配色方案
-
).generate_from_frequencies(word_counts)
-
-
# 显示生成的词云图片
-
plt.imshow(my_cloud, interpolation=
'bilinear')
-
# 显示设置词云图中无坐标轴
-
plt.axis(
'off')
-
plt.show()
运行效果如下:
老婆、朋友、孩子、媳妇、同事、回家、老公等词云都是糗事百科段子内容里出现频率较高,都比较贴进生活,除此之外,"发现" 这个词也是出现频率较高的,看来有点东西。
散点图
分析评论数与好笑数之间关系,散点图可视化
-
import pandas as pd
-
import matplotlib.pyplot as plt
-
import matplotlib as mpl
-
-
# 读取数据
-
df = pd.read_excel(
'datas.xlsx')
-
funny_num, comment_num = df[
'好笑数'], df[
'评论数']
-
# 设置中文显示
-
mpl.rcParams[
'font.family'] =
'SimHei'
-
# 设置图形显示风格 ggplot
-
plt.style.use(
'ggplot')
-
# 设置大小 像素
-
plt.figure(figsize=(
9,
6), dpi=
100)
-
-
# 绘制散点图
-
plt.scatter(comment_num, funny_num)
-
# 添加描述信息
-
plt.title(
'段子评论数与好笑数关系-散点图')
-
plt.xlabel(
'评论数')
-
plt.ylabel(
'好笑数')
-
plt.show()
运行效果如下:
在评论数小于 50 时,点分布密集,大概还有评论数多,好笑数多的关系,评论数大于50之后,点分布非常散乱。段子的评论数和好笑数实时在变,下面来看看我们那是爬取下来的段子里评论数最多、好笑数最多的分别讲的啥。
TOP级别段子
-
import pandas as pd
-
-
# 读取数据
-
df = pd.read_excel(
'datas.xlsx')
-
# 降序排列后打印第一行 评论数最多
-
df1 = df.sort_values(by=
'评论数', ascending=False)
-
print(df1.values[
0])
评论数最多的段子
-
import pandas as pd
-
-
# 读取数据
-
df = pd.read_excel(
'datas.xlsx')
-
# 降序排列后打印第一行 好笑数最多
-
df1 = df.sort_values(by=
'好笑数', ascending=False)
-
print(df1.values[
0])
好笑数最多的段子
emmm,幽默笑话大全__爆笑笑话__笑破你的肚子的搞笑段子,就这?
作者:叶庭云
CSDN:https://yetingyun.blog.csdn.net/本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。觉得文章对你有帮助、让你有所收获的话,期待你的点赞呀,不足之处,也可以在评论区多多指正。
????《Python最优化算法实战》此书以理论结合编程开发为原则,使用Python作为开发语言,讲解优化算法的原理和应用,详细介绍了Python基础、Gurobi 优化器、线性规划、整数规划、多目标优化、动态规划、图与网络分析、智能优化算法。点击下图可看详情/购买!????
感谢北京大学出版社支持!周日统一兑换!后台回复“读书会”进群,聊书聊币吹吹牛!后台回复“规则”轻松赚币,免费包邮带回家!
转载:https://blog.csdn.net/zhuxiao5/article/details/113209379