目录
非遗介绍
找数据
代码实现:
josn网址:
前期准备:
包装基础函数:
主函数:
完整代码(白嫖代码抄作业):
运行结果:
非遗介绍
国家级非物质文化遗产名录是经国务院批准,由文化和旅游部(简称“文旅部”)确定并公布的国家级非物质文化遗产名录。
在国家非物质文化遗产网可以查询国家级非物质文化遗产代表性项目名录
这次来爬一下这个网站国家非物质文化遗产网
找数据
点击换页后网址无变动
由此断定网页数据由二次请求导入(json)
F12检查 打开抓包工具 果然:
在第一页时(两个)
切换到第二页(多了一个):
那么这就是每一页的数据了
来看一下第一页和第二页的请求网址有什么不同:
第一页:
第二页:
很明显 参数p表示的就是页数信息
代码实现:
既然摸清了网页信息 就开始下代码吧
josn网址:
/Article/Index/getProject.html?province=&rx_time=&type=&cate=&keywords=&category_id=16&limit=10&p=页数
可以看出这里会有一些空参数(province,rx_time...)
这些参数是筛选用的 正常爬取用不到 所以可以删掉
/Article/Index/getProject.html?category_id=16&limit=10&p=页数
前期准备:
引库、准备文件、写入表头、准备headers
open时需添加newline=' ' 不然会写一行空一行
# 引用库import requestsimport jsonimport csv# 准备.csvf = open('国家级非物质文化遗产代表性项目名录.csv', mode='w', encoding='utf-8', newline='')writer = csv.writer(f)# 写入表头writer.writerow(["名称", "公布时间", "申报地区或单位", "编号", "类型", "详细信息"])# 请求头h = {"Host": "","Referer": "/project","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/92.0.4515.159 Safari/537.36","X-Requested-With": "XMLHttpRequest"}
包装基础函数:
包含 请求、异常处理(超出最后一页)、从json提取各种信息 、写入文件
def get_info(num):# 空参数可以删掉url = f"/Article/Index/getProject.html?category_id=16&limit=10&p={num}"resp = requests.get(url, headers=h)# 当时解析json的时候导出了一下# with open('info362.json', 'w') as f:#f.write(str(resp.json()))JsonObj = json.loads(resp.text)try:count = len(JsonObj["list"])except TypeError as e:return 'error'for i in range(count):# 名称name = JsonObj["list"][i]["title"]# 公布时间gb_time = JsonObj["list"][i]["rx_time"]# 申报地区或单位gb_time = gb_time.replace('</br>', '')province = JsonObj["list"][i]["province"]# 编号num = JsonObj["list"][i]["num"]# 类型cate = JsonObj["list"][i]["cate"]# 详细信息content = JsonObj["list"][i]["content"]content = content.replace('<br />\r\n\u3000\u3000', '')writer.writerow([name, gb_time, province, num, cate, content])
主函数:
到最后一页需要跳出、每页完成提示、所有下载完毕提示
一定到记得关文件!!!
f.close()
if __name__ == '__main__':i = 1# 到最后一页后自动跳出while True:if get_info(i) != 'error':print(i, 'ok')else:breaki += 1f.close()print('全部ok')
完整代码(白嫖代码抄作业):
# 创 建 人:Cui.# 创建时间:/8/30 16:45# '/project#target1'"""/Article/Index/getProject.html?province=&rx_time=&type=&cate=&keywords=&category_id=16&limit=10&p=页数"""# 引用库import requestsimport jsonimport csv# 准备.csvf = open('国家级非物质文化遗产代表性项目名录.csv', mode='w', encoding='utf-8', newline='')writer = csv.writer(f)# 写入表头writer.writerow(["名称", "公布时间", "申报地区或单位", "编号", "类型", "详细信息"])# 请求头h = {"Host": "","Referer": "/project","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/92.0.4515.159 Safari/537.36","X-Requested-With": "XMLHttpRequest"}def get_info(num):# 空参数可以删掉url = f"/Article/Index/getProject.html?category_id=16&limit=10&p={num}"resp = requests.get(url, headers=h)# 当时解析json的时候导出了一下# with open('info362.json', 'w') as f:#f.write(str(resp.json()))JsonObj = json.loads(resp.text)try:count = len(JsonObj["list"])except TypeError as e:return 'error'for i in range(count):# 名称name = JsonObj["list"][i]["title"]# 公布时间gb_time = JsonObj["list"][i]["rx_time"]# 申报地区或单位gb_time = gb_time.replace('</br>', '')province = JsonObj["list"][i]["province"]# 编号num = JsonObj["list"][i]["num"]# 类型cate = JsonObj["list"][i]["cate"]# 详细信息content = JsonObj["list"][i]["content"]content = content.replace('<br />\r\n\u3000\u3000', '')writer.writerow([name, gb_time, province, num, cate, content])if __name__ == '__main__':i = 1# 到最后一页后自动跳出while True:if get_info(i) != 'error':print(i, 'ok')else:breaki += 1f.close()print('全部ok')
运行结果:
终端显示
文件查看
打包下载链接:/download/weixin_47128472/21753914