基于多多看书网站热门榜单数据爬取
基于多多看书网站热门榜单数据爬取
一,选题背景
大数据时代,要进行数据分析,首先要有数据源,通过爬虫技术可以获得等多的数据源。在进行大数据分析或者进行数据挖掘的时候,数据源可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得,但从这些获得数据的方式,有时很难满足我们对数据的需求,此时就可以利用爬虫技术,自动地从互联网中获取需要的数据内容,并将这些数据内容作为数据源,从而进行更深层次的数据分析。
二,爬虫设计方案
1,爬虫名称:基于多多看书网站热门榜单数据爬取
2,爬虫的内容与数据特征分析
2.1,因为该专题结构清晰,数据易于爬取,易于清洗,该网站允许爬取且不容易被限制
2.2 预期目标是将数据爬取下来后保存下来,并绘制出不同图表以实现数据可视化
3, 技术难点
解析意味着从数据集或文本块中提取相关信息组件,以便以后可以容易地访问它们并将其用于其他操作。要将网页转换为实际上对研究或分析有用的数据,我们需要以一种使数据易于根据定义的参数集进行搜索,分类和服务的方式进行解析。最后,在获得所需的数据并将其分解为有用的组件之后,通过可扩展的方法来将所有提取和解析的数据存储在数据库或集群中,然后创建一个允许用户可及时查找相关数据集或提取的功能。思路有三步:爬取数据,数据清洗,数据保存,数据可视化
技术难点主要是第三方库的使用,因为是边做边学,中间走了很多弯路。
三,结构特征分析
1.页面的结构
2.Htmls页面解析
四,程序设计
1,数据爬取与采集
def crawl():
###网址
url = "https://xs.sogou.com/top/hot/"
###模拟浏览器
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
2,对数据清洗和处理
html = etree.HTML( requests.get( url, headers=header ).text )
rank = html.xpath( '//ul[@class="list-content list-0"]//span[@class="text-num icon"]/text()' ) # 序号
type = html.xpath( '//ul[@class="list-content list-0"]//a[@class="list-type"]/text()' ) # 类型
name = html.xpath( '//ul[@class="list-content list-0"]//a[@class="list-name"]/text()' ) # 小说名称
section = html.xpath( '//ul[@class="list-content list-0"]//a[@class="list-section"]/text()' ) # 更新章节
status = html.xpath( '//ul[@class="list-content list-0"]//span[@class="list-status"]/text()' ) # 状态
count = html.xpath( '//ul[@class="list-content list-0"]//span[@class="list-count"]/text()' ) # 字数
author = html.xpath( '//ul[@class="list-content list-0"]//span[@class="list-author"]/text()' ) # 作者
time = html.xpath( '//ul[@class="list-content list-0"]//span[@class="list-time"]/text()' ) # 更新时间
list = []
for i in range( 0, len( name ) ):
subList = []
subList.append( rank[i] )
subList.append( re.sub( '「', '', re.sub( '」', '', type[i] ) ) )
subList.append( name[i] )
subList.append( section[i] )
subList.append( status[i] )
subList.append( re.sub( ',', '', re.sub( '万字', '', count[i] ) ) )
subList.append( author[i] )
subList.append( time[i] )
list.append( subList )
name = ['排名', '类型', '小说名称', '更新章节', '状态', '字数(万字)', '作者', '更新时间']
3,数据分析与可视化以及数据持久化(包括图)
# 数据持久化
test = pd.DataFrame( columns=name, data=list )
print( test )
test.to_csv( 'bangdan.csv' )
return list
def remove_markers(str_list):
pattern = re.compile( r'[^\u4e00-\u9fa5]' )
return [pattern.sub( '', line ) for line in str_list]
def run():
# 读取数据
csv_file = './bangdan.csv' # 导入csv数据
data = pd.read_csv( csv_file )
datas = data['类型'].value_counts()
te = pd.DataFrame( data=datas )
te.to_csv( 'leixing.csv' )
datazt = data['状态'].value_counts()
t = pd.DataFrame( data=datazt )
t.to_csv( 'zhuangtai.csv' )
dataci = data['小说名称']
print( dataci )
word_list = list( dataci )
word_list = remove_markers( word_list )
print( word_list )
datazzzs = data[['作者', '字数(万字)']]
# datazzzs=datazzzs.groupby('作者').apply(lambda x:x['字数(万字)'].sum())
datazzzs = datazzzs.groupby( '作者' ).agg( {'字数(万字)': 'sum'} ).sort_values( by='字数(万字)', ascending=False )
testpm = pd.DataFrame( data=datazzzs )
testpm.to_csv( 'zzzs.csv' )
csvpm_file = './zzzs.csv' # 导入csv数据
datazzpm = pd.read_csv( csvpm_file )
datazzpm = datazzpm.head( 10 )
print( datazzpm )
words_list = []
for line in word_list:
# 扩展列表
words_list.extend( word for word, flag in pseg.cut( line, use_paddle=True ) if flag in ['a', 'vd', 'n'] )
# 计数
c1 = Counter( words_list )
print( c1 )
# 柱状图生成
a = (
Bar( init_opts=opts.InitOpts( height="450px", width="900px" ) )
.add_xaxis( list( datas.index ) )
.add_yaxis( "类型", list( datas ) )
.set_global_opts(
title_opts=opts.TitleOpts( title="热门小说类型统计" ),
datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts( type_="inside" )],
)
)
# 词云图生成
b = (
WordCloud( init_opts=opts.InitOpts( height="450px", width="900px" ) )
.add( series_name="热点分析", data_pair=c1.most_common(), word_size_range=[22, 66] )
.set_global_opts(
title_opts=opts.TitleOpts(
title="热点分析", title_textstyle_opts=opts.TextStyleOpts( font_size=23 )
),
tooltip_opts=opts.TooltipOpts( is_show=True ),
)
)
# 饼状图生成
c = (
Pie( init_opts=opts.InitOpts( height="450px", width="600px" ) )
.add(
"",
[list( z ) for z in zip( datazt.index, list( datazt ) )],
radius=["40%", "75%"],
)
.set_global_opts(
title_opts=opts.TitleOpts( title="小说状态" ),
legend_opts=opts.LegendOpts( orient="vertical", pos_top="15%", pos_left="2%" ),
)
.set_series_opts( label_opts=opts.LabelOpts( formatter="{b}: {c}" ) )
)
# 天梯图生成
d = (
Funnel( init_opts=opts.InitOpts( height="450px", width="600px" ) )
.add(
"作者",
[list( z ) for z in zip( list( datazzpm['作者'] ), datazzpm.index + 1 )],
sort_="ascending",
label_opts=opts.LabelOpts( position="inside" ),
)
.set_global_opts(
title_opts=opts.TitleOpts( title="作者字数天梯榜(Top10)" ),
legend_opts=opts.LegendOpts( is_show=False )
)
)
# 散点图生成
e = (
Scatter( init_opts=opts.InitOpts( height="450px", width="600px" ) )
.add_xaxis(
xaxis_data=data['排名'] )
.add_yaxis(
series_name="字数(万字)",
y_axis=data['字数(万字)'],
symbol_size=15,
label_opts=opts.LabelOpts( is_show=False ),
)
.set_series_opts()
.set_global_opts(
title_opts=opts.TitleOpts( title="字数-排名分析" ),
xaxis_opts=opts.AxisOpts(
type_="value", splitline_opts=opts.SplitLineOpts( is_show=True )
),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts( is_show=True ),
splitline_opts=opts.SplitLineOpts( is_show=True ),
),
tooltip_opts=opts.TooltipOpts( is_show=False ),
)
)
4,完整代码-------------
1 import re
2 from collections import Counter
3
4 import jieba.posseg as pseg
5 import pandas as pd
6 import requests
7 from bs4 import BeautifulSoup
8 from lxml import etree
9 from pyecharts import options as opts
10 from pyecharts.charts import Bar, WordCloud, Pie, Page, Scatter
11 from pyecharts.charts import Funnel
12 import webbrowser
13 from threading import Thread
14 from tkinter import *
15 from tkinter import ttk
16 import tkinter as tk
17
18
19 # from dask.bytes.tests.test_http import requests
20
21
22 def crawl():
23 ###网址
24 url = "https://xs.sogou.com/top/hot/"
25 ###模拟浏览器
26 header = {
27 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
28
29 ### 使用xpath技术解析网页
30 html = etree.HTML( requests.get( url, headers=header ).text )
31
32 rank = html.xpath( '//ul[@class="list-content list-0"]//span[@class="text-num icon"]/text()' ) # 序号
33
34 type = html.xpath( '//ul[@class="list-content list-0"]//a[@class="list-type"]/text()' ) # 类型
35
36 name = html.xpath( '//ul[@class="list-content list-0"]//a[@class="list-name"]/text()' ) # 小说名称
37
38 section = html.xpath( '//ul[@class="list-content list-0"]//a[@class="list-section"]/text()' ) # 更新章节
39
40 status = html.xpath( '//ul[@class="list-content list-0"]//span[@class="list-status"]/text()' ) # 状态
41
42 count = html.xpath( '//ul[@class="list-content list-0"]//span[@class="list-count"]/text()' ) # 字数
43
44 author = html.xpath( '//ul[@class="list-content list-0"]//span[@class="list-author"]/text()' ) # 作者
45
46 time = html.xpath( '//ul[@class="list-content list-0"]//span[@class="list-time"]/text()' ) # 更新时间
47
48 list = []
49 for i in range( 0, len( name ) ):
50 subList = []
51 subList.append( rank[i] )
52 subList.append( re.sub( '「', '', re.sub( '」', '', type[i] ) ) )
53 subList.append( name[i] )
54 subList.append( section[i] )
55 subList.append( status[i] )
56 subList.append( re.sub( ',', '', re.sub( '万字', '', count[i] ) ) )
57 subList.append( author[i] )
58 subList.append( time[i] )
59 list.append( subList )
60 name = ['排名', '类型', '小说名称', '更新章节', '状态', '字数(万字)', '作者', '更新时间']
61 # 数据持久化
62 test = pd.DataFrame( columns=name, data=list )
63 print( test )
64 test.to_csv( 'bangdan.csv' )
65 return list
66
67
68 def remove_markers(str_list):
69 pattern = re.compile( r'[^\u4e00-\u9fa5]' )
70 return [pattern.sub( '', line ) for line in str_list]
71
72
73 def run():
74 # 读取数据
75 csv_file = './bangdan.csv' # 导入csv数据
76 data = pd.read_csv( csv_file )
77
78 datas = data['类型'].value_counts()
79 te = pd.DataFrame( data=datas )
80 te.to_csv( 'leixing.csv' )
81
82 datazt = data['状态'].value_counts()
83 t = pd.DataFrame( data=datazt )
84 t.to_csv( 'zhuangtai.csv' )
85
86 dataci = data['小说名称']
87 print( dataci )
88 word_list = list( dataci )
89 word_list = remove_markers( word_list )
90 print( word_list )
91
92 datazzzs = data[['作者', '字数(万字)']]
93 # datazzzs=datazzzs.groupby('作者').apply(lambda x:x['字数(万字)'].sum())
94 datazzzs = datazzzs.groupby( '作者' ).agg( {'字数(万字)': 'sum'} ).sort_values( by='字数(万字)', ascending=False )
95 testpm = pd.DataFrame( data=datazzzs )
96 testpm.to_csv( 'zzzs.csv' )
97 csvpm_file = './zzzs.csv' # 导入csv数据
98 datazzpm = pd.read_csv( csvpm_file )
99 datazzpm = datazzpm.head( 10 )
100 print( datazzpm )
101
102 words_list = []
103 for line in word_list:
104 # 扩展列表
105 words_list.extend( word for word, flag in pseg.cut( line, use_paddle=True ) if flag in ['a', 'vd', 'n'] )
106 # 计数
107 c1 = Counter( words_list )
108 print( c1 )
109 # 柱状图生成
110 a = (
111 Bar( init_opts=opts.InitOpts( height="450px", width="900px" ) )
112 .add_xaxis( list( datas.index ) )
113 .add_yaxis( "类型", list( datas ) )
114 .set_global_opts(
115 title_opts=opts.TitleOpts( title="热门小说类型统计" ),
116 datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts( type_="inside" )],
117 )
118 )
119 # 词云图生成
120 b = (
121 WordCloud( init_opts=opts.InitOpts( height="450px", width="900px" ) )
122 .add( series_name="热点分析", data_pair=c1.most_common(), word_size_range=[22, 66] )
123 .set_global_opts(
124 title_opts=opts.TitleOpts(
125 title="热点分析", title_textstyle_opts=opts.TextStyleOpts( font_size=23 )
126 ),
127 tooltip_opts=opts.TooltipOpts( is_show=True ),
128 )
129 )
130 # 饼状图生成
131 c = (
132 Pie( init_opts=opts.InitOpts( height="450px", width="600px" ) )
133 .add(
134 "",
135 [list( z ) for z in zip( datazt.index, list( datazt ) )],
136 radius=["40%", "75%"],
137 )
138 .set_global_opts(
139 title_opts=opts.TitleOpts( title="小说状态" ),
140 legend_opts=opts.LegendOpts( orient="vertical", pos_top="15%", pos_left="2%" ),
141 )
142 .set_series_opts( label_opts=opts.LabelOpts( formatter="{b}: {c}" ) )
143 )
144 # 天梯图生成
145 d = (
146 Funnel( init_opts=opts.InitOpts( height="450px", width="600px" ) )
147 .add(
148 "作者",
149 [list( z ) for z in zip( list( datazzpm['作者'] ), datazzpm.index + 1 )],
150 sort_="ascending",
151 label_opts=opts.LabelOpts( position="inside" ),
152 )
153 .set_global_opts(
154 title_opts=opts.TitleOpts( title="作者字数天梯榜(Top10)" ),
155 legend_opts=opts.LegendOpts( is_show=False )
156 )
157 )
158 # 散点图生成
159 e = (
160 Scatter( init_opts=opts.InitOpts( height="450px", width="600px" ) )
161 .add_xaxis(
162 xaxis_data=data['排名'] )
163 .add_yaxis(
164 series_name="字数(万字)",
165 y_axis=data['字数(万字)'],
166 symbol_size=15,
167 label_opts=opts.LabelOpts( is_show=False ),
168 )
169 .set_series_opts()
170 .set_global_opts(
171 title_opts=opts.TitleOpts( title="字数-排名分析" ),
172 xaxis_opts=opts.AxisOpts(
173 type_="value", splitline_opts=opts.SplitLineOpts( is_show=True )
174 ),
175 yaxis_opts=opts.AxisOpts(
176 type_="value",
177 axistick_opts=opts.AxisTickOpts( is_show=True ),
178 splitline_opts=opts.SplitLineOpts( is_show=True ),
179 ),
180 tooltip_opts=opts.TooltipOpts( is_show=False ),
181 )
182 )
183 # html 生成
184 page = (
185 Page( page_title="result", layout=Page.SimplePageLayout )
186 .add( a )
187 .add( b )
188 .add( c )
189 .add( d )
190 .add( e )
191 .render( "result.html" )
192 )
193
194 with open( "热门小说分析.html", "r+", encoding='utf-8' ) as html:
195 html_bf = BeautifulSoup( html, 'lxml' )
196 divs = html_bf.select( '.chart-container' )
197 divs[0][
198 "style"] = "width:500px;height:250px;position:absolute;top:5px;left:0px;border-style:solid;border-color:#000000;border-width:0px;"
199 divs[1][
200 'style'] = "width:500px;height:400px;position:absolute;top:5px;left:505px;border-style:solid;border-color:#000000;border-width:0px;"
201 divs[2][
202 "style"] = "width:500px;height:400px;position:absolute;top:255x;left:0px;border-style:solid;border-color:#000000;border-width:0px;"
203 divs[3][
204 "style"] = "width:500px;height:400px;position:absolute;top:255px;left:505px;border-style:solid;border-color:#000000;border-width:0px;"
205 body = html_bf.find( "body" )
206 body["style"] = "background-color:#333333;"
207 html_new = str( html_bf )
208 html.seek( 0, 0 )
209 html.truncate()
210 html.write( html_new )
211 html.close()
212
213
214 def thread_it(func, *args):
215 '''
216 将函数打包进线程
217 '''
218 # 创建
219 t = Thread( target=func, args=args )
220 # 守护
221 t.setDaemon( True )
222 # 启动
223 t.start()
224
225
226 class uiob:
227
228 def clear_tree(self, tree):
229 '''
230 清空表格
231 '''
232 x = tree.get_children()
233 for item in x:
234 tree.delete( item )
235
236 def add_tree(self, list, tree):
237 '''
238 新增数据到表格
239 '''
240 i = 0
241 for subList in list:
242 tree.insert( '', 'end', values=subList )
243 i = i + 1
244 tree.grid()
245
246 def searh(self):
247 self.clear_tree( self.treeview ) # 清空表格
248 self.B_0['text'] = '正在努力搜索'
249 list = crawl()
250 self.add_tree( list, self.treeview ) # 将数据添加到tree中
251
252 self.B_0['state'] = NORMAL
253 self.B_0['text'] = '更新榜单'
254
255 run()
256
257 def center_window(self, root, w, h):
258 """
259 窗口居于屏幕中央
260 """
261 # 获取屏幕 宽、高
262 ws = root.winfo_screenwidth()
263 hs = root.winfo_screenheight()
264
265 # 计算 x, y 位置
266 x = (ws / 2) - (w / 2)
267 y = (hs / 2) - (h / 2)
268
269 root.geometry( '%dx%d+%d+%d' % (w, h, x, y) )
270
271 def click(self):
272 webbrowser.open( r"file:///D:/code/Python/CrawlAndCloud/result.html" )
273
274 def ui_process(self):
275 root = Tk()
276 self.root = root
277
278 root.title( "多多图书热门榜" )
279 self.center_window( root, 900, 350 )
280 root.resizable( 0, 0 )
281 root['highlightcolor'] = 'yellow'
282
283 labelframe = LabelFrame( root, width=900, height=350, background="white" )
284 labelframe.place( x=5, y=5 )
285 self.labelframe = labelframe
286 # # 图片
287 # photo = tk.PhotoImage( file="duoduo.png" )
288 # Lab = tk.Label( root, image=photo, )
289 # Lab.place( x=10, y=10 )
290
291 B_1 = Button( labelframe, text="数据分析", background="white" )
292 B_1.place( x=500, y=25, width=150, height=50 )
293 self.B_1 = B_1
294 B_1.configure( command=lambda: thread_it( self.click() ) ) # 按钮绑定单击事件
295 # 查询按钮
296 B_0 = Button( labelframe, text="更新榜单", background="white" )
297 B_0.place( x=700, y=25, width=150, height=50 )
298 self.B_0 = B_0
299 B_0.configure( command=lambda: thread_it( self.searh ) ) # 按钮绑定单击事件
300 # 框架布局,承载多个控件
301 frame_root = Frame( labelframe )
302 frame_l = Frame( frame_root )
303 frame_r = Frame( frame_root )
304 self.frame_root = frame_root
305 self.frame_l = frame_l
306 self.frame_r = frame_r
307
308 # 表格
309 columns = ("序号", "类型", "小说名称", "更新章节", "状态", "字数(万字)", "作者", "更新时间")
310 treeview = ttk.Treeview( frame_l, height=10, show="headings", columns=columns )
311 treeview.column( "序号", width=50, anchor='center' )
312 treeview.column( "类型", width=50, anchor='center' )
313 treeview.column( "小说名称", width=200, anchor='center' )
314 treeview.column( "更新章节", width=200, anchor='center' )
315 treeview.column( "状态", width=50, anchor='center' )
316 treeview.column( "字数(万字)", width=75, anchor='center' )
317 treeview.column( "作者", width=75, anchor='center' )
318 treeview.column( "更新时间", width=150, anchor='center' )
319
320 treeview.heading( "序号", text="序号" ) # 显示表头
321 treeview.heading( "类型", text="类型" )
322 treeview.heading( "小说名称", text="小说名称" )
323 treeview.heading( "更新章节", text="更新章节" )
324 treeview.heading( "状态", text="状态" )
325 treeview.heading( "字数(万字)", text="字数(万字)" )
326 treeview.heading( "作者", text="作者" )
327 treeview.heading( "更新时间", text="更新时间" )
328
329 # 垂直滚动条
330 vbar = ttk.Scrollbar( frame_r, command=treeview.yview )
331 treeview.configure( yscrollcommand=vbar.set )
332
333 treeview.pack()
334 self.treeview = treeview
335 vbar.pack( side=RIGHT, fill=Y )
336 self.vbar = vbar
337
338 # 框架的位置布局
339 frame_l.grid( row=0, column=0, sticky=NSEW )
340 frame_r.grid( row=0, column=1, sticky=NS )
341 frame_root.place( x=10, y=100 )
342
343 root.mainloop()
344
345
346 uicrawl = uiob()
347 uicrawl.ui_process()
五,总结
1.得到的结论:
根据柱状图发现,穿越题材的小说最受大家欢迎,然后依次是世家、言情、世代......;根据关键词词云分析,小说中最喜欢用的主题是总裁、重生、神医、兵王等。;根据饼状图分析,大部分热门小说已经完结,只有百分之13左右还在连载。;根据天梯图分析,写作字数最多的作者是剑锋、莫默等人。;根据散点图分析,小说的字数多少与其排名几乎没有任何联系。基本达到预期的目标。
2.收获:
这次设计过程中让我学会了爬取网站信息的分析和技巧,需要掌握的知识点还有很多,还需要不断学习改进。
将数据用层叠列表的格式存储起来,然后使用panda库的Dataframe函数将数据存到文件中
list=[]
for i inrange(0,len( name )):
subList =[]
subList.append( rank[i])
subList.append( re.sub('「','', re.sub('」','',type[i])))
subList.append( name[i])
subList.append( section[i])
subList.append( status[i])
subList.append( re.sub(',','', re.sub('万字','', count[i])))
subList.append( author[i])
subList.append( time[i])
list.append( subList )
name =['排名','类型','小说名称','更新章节','状态','字数(万字)','作者','更新时间']
# 数据持久化
test = pd.DataFrame( columns=name, data=list)
将保存在文件中的数据分类再保存在不同的文件中,例如“类型”
csv_file ='./bangdan.csv' # 导入csv数据
data = pd.read_csv( csv_file )
datas = data['类型'].value_counts()
te = pd.DataFrame( data=datas )
te.to_csv('leixing.csv')
柱状图生成
a =(
Bar( init_opts=opts.InitOpts( height="450px", width="900px"))
.add_xaxis(list( datas.index ))
.add_yaxis("类型",list( datas ))
.set_global_opts(
title_opts=opts.TitleOpts( title="热门小说类型统计"),
datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts( type_="inside")],
)
)
词云图生成:
b =(
WordCloud( init_opts=opts.InitOpts( height="450px", width="900px"))
.add( series_name="热点分析", data_pair=c1.most_common(), word_size_range=[22,66])
.set_global_opts(
title_opts=opts.TitleOpts(
title="热点分析", title_textstyle_opts=opts.TextStyleOpts( font_size=23)
),
tooltip_opts=opts.TooltipOpts( is_show=True),
)
)
饼状图生成:
c =(
Pie( init_opts=opts.InitOpts( height="450px", width="600px"))
.add(
"",
[list( z )for z inzip( datazt.index,list( datazt ))],
radius=["40%","75%"],
)
.set_global_opts(
title_opts=opts.TitleOpts( title="小说状态"),
legend_opts=opts.LegendOpts( orient="vertical", pos_top="15%", pos_left="2%"),
)
.set_series_opts( label_opts=opts.LabelOpts( formatter="{b}: {c}"))
)
天梯图生成:
d =(
Funnel( init_opts=opts.InitOpts( height="450px", width="600px"))
.add(
"作者",
[list( z )for z inzip(list( datazzpm['作者']), datazzpm.index +1)],
sort_="ascending",
label_opts=opts.LabelOpts( position="inside"),
)
.set_global_opts(
title_opts=opts.TitleOpts( title="作者字数天梯榜(Top10)"),
legend_opts=opts.LegendOpts( is_show=False)
)
)
散点图生成:
e =(
Scatter( init_opts=opts.InitOpts( height="450px", width="600px"))
.add_xaxis(
xaxis_data=data['排名'])
.add_yaxis(
series_name="字数(万字)",
y_axis=data['字数(万字)'],
symbol_size=15,
label_opts=opts.LabelOpts( is_show=False),
)
.set_series_opts()
.set_global_opts(
title_opts=opts.TitleOpts( title="字数-排名分析"),
xaxis_opts=opts.AxisOpts(
type_="value", splitline_opts=opts.SplitLineOpts( is_show=True)
),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts( is_show=True),
splitline_opts=opts.SplitLineOpts( is_show=True),
),
tooltip_opts=opts.TooltipOpts( is_show=False),
)
)
将各个图表模块生成为html
page =(
Page( page_title="热门小说分析", layout=Page.SimplePageLayout )
.add( a )
.add( b )
.add( c )
.add( d )
.add( e )
.render("热门小说分析.html")
)