
python爬取中国进出⼝贸易总额及数据分析
(⼀)、选题的背景
近两年来,在新冠状病毒的侵袭下,各国都在⾯对巨⼤的挑战,有的采取封国措施,有的国家经济⽔平下降,但是我们中国不但保持不下降的经济,还可以说有所进
步。我想通过进出⼝贸易总额分析,知道我们国家这两年,⾯对疫情的困难下,进出⼝总额与之前对⽐,通过数据可视化看出我们国家进出⼝总额的近年来的差别。
(⼆)、主题式⽹络爬⾍设计⽅案
1.主题式⽹络爬⾍名称
国内进出⼝贸易总额爬⾍分析
2. 主题式⽹络爬⾍爬取的内容与数据特征分析
爬取该⽹站的国内进出⼝贸易总额以及对当⽉进出⼝额的⾦额(亿美元)、同⽐增长、环⽐增长以及累计进出⼝额的⾦额(亿美元)、同⽐增长的分析。
3. 主题式⽹络爬⾍设计⽅案概述(包括实现思路与技术难点)
爬取当前⽹站的国内进出⼝贸易总额以及对当⽉进出⼝额的⾦额(亿美元)、同⽐增长、环⽐增长以及累计进出⼝额的⾦额(亿美元)、同⽐增长的分析,并找到该
标签下的链接进⾏跳转爬取下⼀个页⾯的有关数据,再数据清洗,数据可视化。
在对页⾯标签的再爬取采取的循化爬取会因为数据的切⽚问题导致出错、对数据进⾏清洗和处理、对可⽤数据的可视化处理。
具体的思路和分析通过下列代码与图⽚展⽰。
(三)、主题页⾯的结构特征分析
1.主题页⾯的结构与特征分析
2. Htmls 页⾯解析
在第⼀个图中我们可以发现我们需要找到进出⼝贸易总额,然后在往下⾯找,第⼆张图⽚我们可以发现我们所需要爬取的数据位于tobody标签的tr中,前两⾏是⼩标
题,到第三⾏开始为2021年11⽉的具体进出⼝贸易总额(亿美元)、同⽐增长、环⽐增长的数据,以此类推10⽉9⽉......
3.节点(标签)查找⽅法与遍历⽅法
⽤双循环遍历tr标签。再遍历tr标签下的td标签取出数据。
(四)、⽹络爬⾍程序设计
爬⾍程序主体要包括以下各部分,要附源代码及较详细注释,并在每部分程序后
⾯提供输出结果的截图。
1.数据爬取与采集
1 from bs4 import BeautifulSoup
2 import requests
3 import as plt
4 import pandas as pd
5 import csv
6 def getHTMLText(url):
30 lll
1 for hji in range(len(df["⽉份"])):
2 try:
3 [hji,"⾦额(亿美元)"]=float([hji,"⾦额(亿美元)"])
4 except:
5 [hji,"⾦额(亿美元)"]=0
6 try:
7 [hji,"同⽐增长"]=float([hji,"同⽐增长"][0:-1])/100
8 except:
9 [hji,"同⽐增长"]=0
10 try:
11 [hji,"环⽐增长"]=float([hji,"环⽐增长"][0:-1])/100
12 except:
13 [hji,"环⽐增长"]=0
14 try:
15 [hji,"⾦额(亿美元).1"]=float([hji,"⾦额(亿美元).1"])
16 except:
17 [hji,"⾦额(亿美元).1"]=0
18 try:
19 [hji,"同⽐增长.1"]=float([hji,"同⽐增长.1"][0:-1])/100
20 except:
21 [hji,"同⽐增长.1"]=0
22 try:
23 [hji,"环⽐增长.1"]=float([hji,"环⽐增长.1"][0:-1])/100
24 except:
3.数据分析与可视化(例如:数据柱形图、直⽅图、散点图、盒图、分布图)
1 import requests
2 from bs4 import BeautifulSoup
3 import as plt
4 import aborn as sns
5 import pandas as pd
6 #df=_csv("C:")
7 ggf=_values(by="⾦额(亿美元)",
8 axis=0,
9 ascending=Fal,)
10 bk=ggf["⾦额(亿美元).1"][0:6]
11 dfc=ggf["⾦额(亿美元)"][0:6]
12 zk=ggf["⾦额(亿美元).2"][0:6]
13 city_1=ggf["⾦额(亿美元).3"][0:6]
14 #显⽰中⽂标签,处理中⽂乱码问题
15 ms['-rif']=['Microsoft YaHei']
16 ms['e_minus']=Fal
17 (figsize=(10,6))
18 x=list(range(len(zk)))
19 #给图⽚设置间距
20 total_width=0.8
21 n=4
42 zk,
43 width=width,#宽度
44 label="⾦额(亿美元).1",
45 tick_label=city_1,
46 color="b"
47 )
48 gtx_2=zip(x,zk)
49 for aa,ab in gtx_2:
50 (aa,
51 ab,
1 #通过盒图了解平均进出⼝⾦额在什么位置⾦额分布情况
2 t(2,2,1)
3 t(df["⾦额(亿美元)"],
4 notch=True,
5 sym=None,
6 vert=None,
7 whis=None,
8 positions=None,
9 widths=None,
10 patch_artist=True,
11 meanline=None,
12 showmeans=None,
13 showcaps=None,
14 showbox=None,
15 showfliers=None,
16 boxprops=None,
17 labels=None,
18 flierprops=None,
19 medianprops=None,
20 meanprops=None,
21 capprops=None,
40 labels=None,
41 flierprops=None,
42 medianprops=None,
43 meanprops=None,
44 capprops=None,
45 whiskerprops=None)
46 ("同⽐增长.1")
47 ("环⽐增长.1")
48 t(2,2,3)
49
50 t(df["⾦额(亿美元).2"],
51 notch=True,
52 sym=">",
53 vert=None,
54 whis=None,
55 positions=None,
56 widths=None,
57 patch_artist=True,
4.根据数据之间的关系,分析两个变量之间的相关系数,画出散点图,并建⽴变
量之间的回归⽅程(⼀元或多元)。
1 from pyecharts import options as opts
2 from import Line
3 df=_csv("D:刘政标python课程设计")
4 line1 = (
5 Line()
6 .add_xaxis(list(df['⾦额(亿美元)'][:10].values))
7 .add_yaxis("进⼝", df['⾦额(亿美元)'][:10].())
8 .add_yaxis("出⼝", df['⾦额(亿美元).1'][:10].())
9 .t_global_opts(
10 title_opts=pts(title="进出⼝⾦额总值"),
11 )
1 #整理画图数据
2 hi=_values(by="⾦额(亿美元)",
3 axis=0,
4 ascending=Fal,)
5 for ikl in range(len(df["⾦额(亿美元)"])):
6 if ikl==29:
7 fa=[ikl,"⾦额(亿美元)"]
8 elif ikl==60:
9 fb=[ikl,"⾦额(亿美元)"]
10 elif ikl==90:
11 fc=[ikl,"⾦额(亿美元)"]
12 a_25=0
13 a_50=0
14 a_75=0
15 a_100=0
16 DF=len(hi["⾦额(亿美元)"])
17 t(1,2,1)
18 for gh in range(DF):
19 if [gh,"⾦额(亿美元)"]>fa:
20 a_100=a_100+1
21 elif [gh,"⾦额(亿美元)"]>fb:
22 a_75=a_75+1
23 elif [gh,"⾦额(亿美元)"]>fc:
24 a_50=a_50+1
25 el:
26 a_25=a_25+1
27 a_data=[a_25,a_50,a_75,a_100]
28 ms['-rif']=['Microsoft YaHei'] #显⽰中⽂标签,处理中⽂乱码问题
29 ms['e_minus']=Fal
30 #构造数据
31 explode = [0, 0, 0, 0]
32 labels = ["0-25%", "25-50%", "50-75%", "75-100%"]
33 colors = ['gold', 'chartreu', 'cyan', 'pink']
34 (
35 a_data, #绘图数据
36 explode=explode, #指定饼图某些部分的突出显⽰,即呈现爆炸式
37 labels=labels,
38 colors=colors,
39 autopct='%.2f%%',
40 pctdistance=0.8,
41 labeldistance=1.1,
42 startangle=180,
43 radius=1.2,
44 counterclock=Fal,
45 wedgeprops={'linewidth':1.5,'edgecolor':'r'},
46 textprops={'fontsize':10,'color':'black'},
47 )
48 #添加图标题
49 ('进⼝⾦额(亿美元)')
50 #----------------------------------------------------------------------------------------------------------------------------------
51 t(1,2,2)
52 #显⽰图形
53 hi=_values(by="⾦额(亿美元).1",
54 axis=0,
55 ascending=Fal,)
56 for ikl in range(len(df["⾦额(亿美元).1"])):
57 if ikl==29:
58 fa=[ikl,"⾦额(亿美元).1"]
59 elif ikl==60:
60 fb=[ikl,"⾦额(亿美元).1"]
61 elif ikl==90:
62 fc=[ikl,"⾦额(亿美元).1"]
63 a_25=0
64 a_50=0
65 a_75=0
66 a_100=0
67 DF=len(hi["⾦额(亿美元).1"])
68 for gh in range(DF):
69 if [gh,"⾦额(亿美元).1"]>fa:
70 a_100=a_100+1
71 elif [gh,"⾦额(亿美元).1"]>fb:
72 a_75=a_75+1
73 elif [gh,"⾦额(亿美元).1"]>fc:
74 a_50=a_50+1
75 el:
76 a_25=a_25+1
77 a_data=[a_25,a_50,a_75,a_100]
78 ms['-rif']=['Microsoft YaHei'] #显⽰中⽂标签,处理中⽂乱码问题
79 ms['e_minus']=Fal
80 #构造数据
81 explode = [0, 0, 0, 0]
82 labels = ["0-25%", "25-50%", "50-75%", "75-100%"]
83 colors = ['gold', 'chartreu', 'cyan', 'pink']
84 (
85 a_data, #绘图数据
86 explode=explode, #指定饼图某些部分的突出显⽰,即呈现爆炸式
87 labels=labels,
88 colors=colors,
89 autopct='%.2f%%',
90 pctdistance=0.8,
91 labeldistance=1.1,
92 startangle=180,
93 radius=1.2,
94 counterclock=Fal,
95 wedgeprops={'linewidth':1.5,'edgecolor':'r'},
96 textprops={'fontsize':10,'color':'black'},
97 )
98 #添加图标题
99 ('出⼝⾦额(亿美元)')
100 ()
6.数据持久化
1 with open("D:刘政标python课程设计","w",encoding="utf-8") as fi:
2 writer=(fi)
3 ow(["⽉份",
4 "⾦额(亿美元)","同⽐增长","环⽐增长",
5 "⾦额(亿美元)","同⽐增长","环⽐增长",
6 "⾦额(亿美元)",
7 "同⽐增长",
8 "⾦额(亿美元)","同⽐增长"])#给每列的数据列名
9 for da in xxx:
10 ow(da)
11 ()
7.将以上各部分的代码汇总,附上完整程序代码
1 from bs4 import BeautifulSoup
2 import requests
3 import as plt
4 import pandas as pd
5 import csv
6 def getHTMLText(url):
7 try:
8 headers={"Ur-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/
9 537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.34"}
10 r=(url,headers=headers)
11 _for_status()#如果状态不是200,就会引发HTTPError异常
12 ng = nt_encoding
13 print(r)
14 return
15 except:
16 return "no"
17
18 url="/historical/"
19 a=getHTMLText(url)
20 soup=BeautifulSoup(a)
21 soup
22 lll=[]
23 for i in _all("tr")[2:]:
24 zz=[]
25 bb=0
26 for a in i:
27 if bb==1:
28 (a)
29 elif bb==3:
30 (a)
31 elif bb==5:
32 (a)
33 elif bb==7:
34 (a)
35 elif bb==9:
36 (a)
37 elif bb==11:
38 (a)
39 elif bb==13:
40 (a)
41 elif bb==15:
42 (a)
43 elif bb==17:
44 (a)
45 elif bb==19:
46 (a)
47 elif bb==21:
48 (a)
49 bb=bb+1
50 (zz)
51 lll
52 xxx=[]
53 for gtk in lll:
54 hv=[]
55 for i in gtk:
56 (str(i)[4:-5])
57 (hv)
58 xxx
59 with open("D:刘政标python课程设计","w",encoding="utf-8") as fi:
60 writer=(fi)
61 ow(["⽉份",
62 "⾦额(亿美元)","同⽐增长","环⽐增长",
63 "⾦额(亿美元)","同⽐增长","环⽐增长",
64 "⾦额(亿美元)",
65 "同⽐增长",
66 "⾦额(亿美元)","同⽐增长"])#给每列的数据列名
67 for da in xxx:
68 ow(da)
69 ()
70 for hji in range(len(df["⽉份"])):
71 try:
72 [hji,"⾦额(亿美元)"]=float([hji,"⾦额(亿美元)"])
73 except:
74 [hji,"⾦额(亿美元)"]=0
75 try:
76 [hji,"同⽐增长"]=float([hji,"同⽐增长"][0:-1])/100
77 except:
78 [hji,"同⽐增长"]=0
79 try:
80 [hji,"环⽐增长"]=float([hji,"环⽐增长"][0:-1])/100
81 except:
82 [hji,"环⽐增长"]=0
83 try:
84 [hji,"⾦额(亿美元).1"]=float([hji,"⾦额(亿美元).1"])
85 except:
86 [hji,"⾦额(亿美元).1"]=0
87 try:
88 [hji,"同⽐增长.1"]=float([hji,"同⽐增长.1"][0:-1])/100
89 except:
90 [hji,"同⽐增长.1"]=0
91 try:
92 [hji,"环⽐增长.1"]=float([hji,"环⽐增长.1"][0:-1])/100
93 except:
94 [hji,"环⽐增长.1"]=0
95 try:
96 [hji,"⾦额(亿美元).2"]=float([hji,"⾦额(亿美元).2"])
97 except:
98 [hji,"⾦额(亿美元).2"]=0
99 try:
100 [hji,"同⽐增长.2"]=float([hji,"同⽐增长.2"][0:-1])/100
101 except:
102 [hji,"同⽐增长.2"]=0
103 try:
104 [hji,"⾦额(亿美元).3"]=float([hji,"⾦额(亿美元).3"])
105 except:
106 [hji,"⾦额(亿美元).3"]=0
107 try:
108 [hji,"同⽐增长.3"]=float([hji,"同⽐增长.3"][0:-1])/100
109 except:
110 [hji,"同⽐增长.3"]=0
111 df
112 import requests
113 from bs4 import BeautifulSoup
114 import as plt
115 import aborn as sns
116 import pandas as pd
117 #df=_csv("C:")
118 ggf=_values(by="⾦额(亿美元)",
119 axis=0,
120 ascending=Fal,)
121 bk=ggf["⾦额(亿美元).1"][0:6]
122 dfc=ggf["⾦额(亿美元)"][0:6]
123 zk=ggf["⾦额(亿美元).2"][0:6]
124 city_1=ggf["⾦额(亿美元).3"][0:6]
125 #显⽰中⽂标签,处理中⽂乱码问题
126 ms['-rif']=['Microsoft YaHei']
127 ms['e_minus']=Fal
128 (figsize=(10,6))
129 x=list(range(len(zk)))
130 #给图⽚设置间距
131 total_width=0.8
132 n=4
133 width=total_width/n
134 for i in range(len(x)):
135 x[i]-=width
136 (x,
137 bk,
138 width=width,
139 label="⾦额(亿美元)",
140 color="brown"
141 )
142 gtx_3=zip(x,bk)
143 for aa,ab in gtx_3:
144 (aa,
145 ab,
146 ab,
147 ha="center",
148 va='bottom',
149 fontsize=10)
150 for i in range(len(x)):
151 x[i]+=width
152 (x,
153 zk,
154 width=width,#宽度
155 label="⾦额(亿美元).1",
156 tick_label=city_1,
157 color="b"
158 )
159 gtx_2=zip(x,zk)
160 for aa,ab in gtx_2:
161 (aa,
162 ab,
163 ab,
164 ha="center",
165 va='bottom',
166 fontsize=10)
167
168 for i in range(len(x)):
169 x[i]+=width
170 (x,
171 city_1,
172 width=width,
173 label="⾦额(亿美元).2",
219 showbox=None,
220 showfliers=None,
221 boxprops=None,
222 labels=None,
223 flierprops=None,
224 medianprops=None,
225 meanprops=None,
226 capprops=None,
227 whiskerprops=None)
228 ("同⽐增长")
229 ("环⽐增长")
230 t(2,2,2)
231 t(df["⾦额(亿美元).1"],
232 notch=True,
233 sym=None,
234 vert=None,
235 whis=None,
236 positions=None,
237 widths=None,
238 patch_artist=True,
239 meanline=None,
240 showmeans=None,
241 showcaps=None,
242 showbox=None,
243 showfliers=None,
244 boxprops=None,
245 labels=None,
246 flierprops=None,
247 medianprops=None,
248 meanprops=None,
249 capprops=None,
250 whiskerprops=None)
251 ("同⽐增长.1")
252 ("环⽐增长.1")
253 t(2,2,3)
254
255 t(df["⾦额(亿美元).2"],
256 notch=True,
257 sym=">",
258 vert=None,
259 whis=None,
260 positions=None,
261 widths=None,
262 patch_artist=True,
263 meanline=None,
264 showmeans=None,
265 showcaps=None,
266 showbox=None,
267 showfliers=None,
268 boxprops=None,
269 labels=None,
270 flierprops=None,
271 medianprops=None,
272 meanprops=None,
273 capprops=None,
274 whiskerprops=None)
275 ("同⽐增长.2")
276 ("环⽐增长.2")
277 t(2,2,4)
278 t(df["⾦额(亿美元).3"],
279 notch=True,
319 if ikl==29:
320 fa=[ikl,"⾦额(亿美元)"]
321 elif ikl==60:
322 fb=[ikl,"⾦额(亿美元)"]
323 elif ikl==90:
324 fc=[ikl,"⾦额(亿美元)"]
325 a_25=0
326 a_50=0
327 a_75=0
328 a_100=0
329 DF=len(hi["⾦额(亿美元)"])
330 t(1,2,1)
331 for gh in range(DF):
332 if [gh,"⾦额(亿美元)"]>fa:
333 a_100=a_100+1
334 elif [gh,"⾦额(亿美元)"]>fb:
335 a_75=a_75+1
336 elif [gh,"⾦额(亿美元)"]>fc:
337 a_50=a_50+1
338 el:
339 a_25=a_25+1
340 a_data=[a_25,a_50,a_75,a_100]
341 ms['-rif']=['Microsoft YaHei'] #显⽰中⽂标签,处理中⽂乱码问题
342 ms['e_minus']=Fal
343 #构造数据
344 explode = [0, 0, 0, 0]
345 labels = ["0-25%", "25-50%", "50-75%", "75-100%"]
346 colors = ['gold', 'chartreu', 'cyan', 'pink']
347 (
348 a_data, #绘图数据
349 explode=explode, #指定饼图某些部分的突出显⽰,即呈现爆炸式
350 labels=labels,
351 colors=colors,
352 autopct='%.2f%%',
353 pctdistance=0.8,
354 labeldistance=1.1,
355 startangle=180,
356 radius=1.2,
357 counterclock=Fal,
358 wedgeprops={'linewidth':1.5,'edgecolor':'r'},
359 textprops={'fontsize':10,'color':'black'},
360 )
361 #添加图标题
362 ('进⼝⾦额(亿美元)')
363 #----------------------------------------------------------------------------------------------------------------------------------
364 t(1,2,2)
365 #显⽰图形
366 hi=_values(by="⾦额(亿美元).1",
367 axis=0,
368 ascending=Fal,)
369 for ikl in range(len(df["⾦额(亿美元).1"])):
370 if ikl==29:
371 fa=[ikl,"⾦额(亿美元).1"]
372 elif ikl==60:
373 fb=[ikl,"⾦额(亿美元).1"]
374 elif ikl==90:
375 fc=[ikl,"⾦额(亿美元).1"]
376 a_25=0
377 a_50=0
378 a_75=0
379 a_100=0
380 DF=len(hi["⾦额(亿美元).1"])
381 for gh in range(DF):
382 if [gh,"⾦额(亿美元).1"]>fa:
383 a_100=a_100+1
384 elif [gh,"⾦额(亿美元).1"]>fb:
385 a_75=a_75+1
386 elif [gh,"⾦额(亿美元).1"]>fc:
387 a_50=a_50+1
388 el:
389 a_25=a_25+1
390 a_data=[a_25,a_50,a_75,a_100]
391 ms['-rif']=['Microsoft YaHei'] #显⽰中⽂标签,处理中⽂乱码问题
392 ms['e_minus']=Fal
393 #构造数据
394 explode = [0, 0, 0, 0]
395 labels = ["0-25%", "25-50%", "50-75%", "75-100%"]
396 colors = ['gold', 'chartreu', 'cyan', 'pink']
397 (
398 a_data, #绘图数据
399 explode=explode, #指定饼图某些部分的突出显⽰,即呈现爆炸式
400 labels=labels,
401 colors=colors,
402 autopct='%.2f%%',
403 pctdistance=0.8,
404 labeldistance=1.1,
405 startangle=180,
1.经过对主题数据的分析与可视化,可以得到哪些结论?是否达到预期的⽬标?
结论:(1)近年来,所受疫情影响进出⼝贸易总额总体变化幅度不是特别⼤。
(2)总体来说,我们国家出⼝总⾦额⼤于进⼝总总额,总⽀出⼩于总收⼊。
(3)我们国家进出⼝贸易不断在提⾼。
达到预期⽬标
2.在完成此设计过程中,得到哪些收获?以及要改进的建议?
在此次设计过程种我对数据处理种的数据筛出有了很⼤的收获,对爬⾍知识更加了解,就是怎么进⾏类型转换,然后达到⾃⼰的想要的效果。
受益浅!需要改进的地⽅可能就是编写程序反应时间过慢了!编程经验⽐较⽋缺。

本文发布于:2023-11-02 17:15:54,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1698916555227261.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:python爬取中国进出口贸易总额及数据分析.doc
本文 PDF 下载地址:python爬取中国进出口贸易总额及数据分析.pdf
| 留言与评论(共有 0 条评论) |