非遗介绍:
非物质文化遗产是各族人民世代相承的、与群众生产生活密切相关的各种传统文化表现形式(如民俗活动、表演艺术、传统消费等) 和文化空间(如民间礼仪、传统节庆、宗教祭祀等),这些非物质文化遗产是各民族先民在历史长河中遗留下来的文化结晶。

项目概述:
为全面了解全国各省市地区非遗项目的分布,对各个省市的非遗项目全面了解;为进一步提高人民群众非物质文化遗产保护意识,传承、弘扬中华优秀传统文化,营造非遗保护良好社会氛围,文化和旅游部在遗产日前后集中开展系列非遗宣传展示活动。

技术:
Python+requests+Fiddler+Tableau可视化
我们要抓取的信息,项目序号、项目编号、公布时间、类别、所属地区、类型、申报地区或单位、保护单位
实现思路:打开网站获取项目清单Url,逐条进行爬取后存储为xlsx文件
实际操作过程发现,清单项目被隐藏,用fiddler抓包,找到清单项目Url,分析后发现项目Url由两部分组成:前缀:http://www.ihchina.cn/project_details/ + 项目编号:12177(最小),没有进行加密
网站一共有3145各项目:最后一个编号为:15330(最大), 这不刚好3000多个,抓包都不用了,完美
代码:
#导入相关模块
import requests
import json
import time
from lxmlimport etree
import xlsxwriter
#定义获取项目信息
item_name= [] #项目名称
item_order_number= [] #项目序号
item_number= [] #项目编号
open_time= [] #公开时间
category= [] #类别
region_of_origin= [] #所属地区
item_type= [] #类型
application_area_or_unit= [] #申报地区或单位
protect_unit= [] #保护单位
content= [] #概述
#请求过程
detail_url= "http://www.ihchina.cn/project_details/"
#此处自定义长度
for nin range(12177, 12190):
request_url= detail_url+ str(n)
html= requests.get(request_url).text
html_data= etree.HTML(html)
#获取相关信息
item_n= html_data.xpath('//div[@class="h30"]/text()')
i_o_n= html_data.xpath('//div[@class="table"]//tr[1]/td[1]/div/text()')
i_n= html_data.xpath('//div[@class="table"]//tr[1]/td[2]/div/text()')
o_t= html_data.xpath('//div[@class="table"]//tr[2]/td[1]/div/text()')
cate= html_data.xpath('//div[@class="table"]//tr[2]/td[2]/div/text()')
r_o_o= html_data.xpath('//div[@class="table"]//tr[3]/td[1]/div/text()')
i_t= html_data.xpath('//div[@class="table"]//tr[3]/td[2]/div/text()')
a_a_o_u= html_data.xpath('//div[@class="table"]//tr[4]/td[1]/div/text()')
p_u= html_data.xpath('//div[@class="table"]//tr[4]/td[2]/div/text()')
con= html_data.xpath('//div[@class="text"]/div/text()')
#保存相关信息
item_name.append(item_n[0])
item_order_number.append(i_o_n[0].split(':')[1])
item_number.append(i_n[0].split(':')[1])
open_time.append(o_t[0].split(':')[1])
category.append(cate[0].split(':')[1])
region_of_origin.append(r_o_o[0].split(':')[1])
item_type.append(i_t[0].split(':')[1])
application_area_or_unit.append(a_a_o_u[0].split(':')[1])
protect_unit.append(p_u[0].split(':')[1])
str_con=''
for xin con:
str_con+= x
content.append(str_con.split(':')[1])
#显示相关信息
print("已完成%.2f" % ((n-12177)/3154*100) + "%")
workbook= xlsxwriter.Workbook('China非遗项目编号.xlsx')
worksheet= workbook.add_worksheet("项目基本信息")
title= ['项目名称','项目序号','项目编号','公开时间','类别','所属地区','类型','申报地区或单位','保护单位','概述']
worksheet.write_row('A1', title)
worksheet.write_column('A2', item_name)
worksheet.write_column('B2', item_order_number)
worksheet.write_column('C2', item_number)
worksheet.write_column('D2', open_time)
worksheet.write_column('E2', category)
worksheet.write_column('F2', region_of_origin)
worksheet.write_column('G2', item_type)
worksheet.write_column('H2', application_area_or_unit)
worksheet.write_column('I2', protect_unit)
worksheet.write_column('J2', content)
workbook.close()
Tableau可视化


注:数据全部来源网络,官网也有可视化,其它功能自行探索
网友评论