故宫博物馆爬虫(简略版)
故宫博物馆爬虫
- 基础代码
- 后续
- 总代码
基础代码
import requests,re,time
from lxml import etreeurl = r'https://img.dpm.org.cn/Public/static/CCP/index.html'
base_url = r'https://img.dpm.org.cn/Public/static/CCP/'def getHtml(url):#获取网页源代码header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'}html = requests.get(url,headers=header)return htmldef get_titleType_href(html):#获取藏品分类链接selector = etree.HTML(html.text)museum_type_href = selector.xpath('//map[@name="Map2"]/area/@href')#获取藏品所有品类#print(museum_type_href)return museum_type_href#这个没用了
def get_collection_details(url):#获取分类列表中的藏品信息rel_url = base_url+url#拼接urlreturn rel_url# print(rel_url)# html_next = getHtml(rel_url)# detail_dict = {}# selector = etree.HTML(html_next.text)#藏品详情信息取不到# ddd = selector.xpath('//div[@class="dbody"]/table[@class="dtabcss"]/tbody/tr/td')# print(len(ddd))# dd = selector.xpath('//tbody[@id="tabBodyLeft"]/tr')# print(len(dd))
get_collection_details这个函数就是提取上图所示的藏品编号,名称,时代等信息的,但是通过xpath定位不到。爬出的源码中显示是类似document.write("…")。
定位不到“//tbody[@id=‘tabBodyLeft’]”,所有后续数据提取,清洗也完不成了。
后续
这个可能属于js运行后才显示到页面上的,不会,不清楚,就瞎搞。
找出来了,点击response,看到它的数据:
“rname”:“任鸣凤花卉册”,“rnum”:“故00005019-2/12”},{“id”:4221760,“rera”:“清”,“rname”:“任鸣凤花卉册”,“rnum”:“故00005019-3/12”},{“id”:4221761,“rera”:“清”,“rname”:“任鸣凤花卉册”,“rnum”:“故00005019-4/12”},{“id”:4221762,“rera”:“清”,“rname”:“任鸣凤花卉册”,“rnum”:“故00005019-5/12”},{“id”:4221763,“rera”:“清”,“rname”:“任鸣凤花卉册”,“rnum”:“故00005019-6/12”},{“id”:4221764,“rera”:“清”,“rname”:“任鸣凤花卉册”,“rnum”:“故00005019-7/12”}]};
这就是其中的部分信息,很像是没有加载到页面上的信息。
那就将它的网址复制,如:https://img.dpm.org.cn/Public/static/CCP/json/huihua/huihua_1.js?_=1585874428526,
显示就是如上图所示,汉字编码格式不对,不能正确显示,但是分析其中的属性,id,rera,rname正好三个属性,对应上了。所有工作就解决了,唯一可能存在的就是字体反爬,必须找到相应文件才能解决,先不管。
分析出来,每个js文件对应页面的六页内容,而链接的其他信息相同,由此得出链接格式模板,可以对链接微调进行多页面爬取了。
总代码
所有分析汇总,加部分实现。
import requests,re,time
from lxml import etreeurl = r'https://img.dpm.org.cn/Public/static/CCP/index.html'
base_url = r'https://img.dpm.org.cn/Public/static/CCP/'def getHtml(url):#获取网页源代码header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'}html = requests.get(url,headers=header)return htmldef get_titleType_href(html):#获取藏品分类链接selector = etree.HTML(html.text)museum_type_href = selector.xpath('//map[@name="Map2"]/area/@href')#获取藏品所有品类#print(museum_type_href)return museum_type_href#这个没用了
def get_collection_details(url):#获取分类列表中的藏品信息rel_url = base_url+url#拼接urlreturn rel_url# print(rel_url)# html_next = getHtml(rel_url)# detail_dict = {}# selector = etree.HTML(html_next.text)#藏品详情信息取不到# ddd = selector.xpath('//div[@class="dbody"]/table[@class="dtabcss"]/tbody/tr/td')# print(len(ddd))# dd = selector.xpath('//tbody[@id="tabBodyLeft"]/tr')# print(len(dd))if __name__=="__main__":html = getHtml(url)type_list = get_titleType_href(html)collection_urls = []#藏品分类网址列表new_type_list = []#关键字列表for item in type_list:collection_urls.append(get_collection_details(item))key = item.replace('.html','')new_type_list.append(key)js_list = []for i in new_type_list:for j in range(1,11):js_url = base_url+"json/"+i+'/'+i+'_'+str(j)+'.js'#拼接js路径js_url = js_url.replace(' ','')js_list.append(js_url)for i in js_list:try:xi = getHtml(i).textname = re.split('/', i)[-1]name_1 = name.replace('.js','.txt')with open(r"C:\Users\86188\Desktop\故宫博物馆藏品信息\%s"%(name_1),'w') as f:f.write(xi)print("%s写完了!!!"%name_1)time.sleep(3)if '9' in i:time.sleep(10)except:print("这个出错了,继续吧!!!")
因为一个绘画类就500多页,由于某些原因,不好用数据库存,就只能写成txt文件,所以也没爬完。相当于每个分类就爬了60页,很多细节也没用处理。最终得到了一个文件夹。就到此结束啦!!!
故宫博物馆爬虫(简略版)相关推荐
- Vue 开发一个简略版的飞机大战小游戏
文章目录 使用 Vue 开发一个简略版的飞机大战小游戏 一.实现思路 二.所需知识点 三.实现步骤 使用 Vue 开发一个简略版的飞机大战小游戏 如题,假设你为了向更多访问你博客的人展示你的技术,你决 ...
- 最大最小单词简略版(The Biggest and Smallest Words)
最大最小单词简略版(The Biggest and Smallest Words) 编写程序找出一组单词中"最小"单词和"最大"单词. 用户输入单词后,程序根据 ...
- pandas基础学习笔记(简略版)
pandas基础学习笔记(简略版) 1.DataFrame 2.series 3.基本数据操作 4.DataFrame 运算 5.pandas绘图 6.文本的读取与存储 1.DataFrame 既有行 ...
- 【python】财经数据获取_tushare简略版V1.0(备查)
财经数据获取_tushare简略版V1.0 撰写及编辑于20201011周日 广州图书馆 主要获取列表: 1.当前所有正常上市交易的股票列表 pro.stock_basic 2.指数基础信息列表 pr ...
- 小白的爬虫--微博版
小白的爬虫–微博版(一) 本贴不太涉及较多技术知识,可能仅能对刚入门爬虫的小白且有迫切爬虫任务需求的,有一定的帮助,(本人也只是小白一名,如果有技术大佬愿意指点,感激不尽), [附带源码] [http ...
- 22事件(简略版事件声明方式)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 新浪微博爬虫手机版(附源码)
上篇已经说了手机版的比较好爬,本篇就贴出一个新浪微博手机版爬虫....至于电脑版,因为我目前要用,暂时不提供分享 # coding: utf-8 ''' 以关键词收集新浪微博 ''' import w ...
- 故宫博物馆数字文创与新媒体传播建设方案
故宫博物院是在明朝.清朝两代皇宫及其收藏的基础上建立起来的中国综合性博物馆,是中国收藏文物最丰富的博物馆,更是中国最大的古代文化艺术博物馆.是最具中国特色.最让中国人为之骄傲的文化名片,是当之无愧的博 ...
- uni-app开发App上架Apple Store流程(简略版)
环境准备: MacBook(安装HBuilderX.XCode.Developer.TestFlight.Transporter),苹果开发者账号 详细版地址:http://t.csdn.cn/mTM ...
- python爬虫+网页版微信实时获取消息程序
项目需求: 目的是24小时爬取各种软件的讯息并且以一种统一的方式集中发送给自己. 实现方法: 利用python的requests库以及wxpy库,前者用来爬取网页,后者用来将爬到的内容发送给自己. 程 ...
最新文章
- iscsi target 配置(服务端安装)--一
- iOS边练边学--CALayer,非根层隐式动画,钟表练习
- 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 简介 | 权限申请处理细节 | 添加依赖 | 界面权限申请结果处理 | 权限申请结果回调接口 )
- Java Queue 使用总结
- linux fls函数,Linux学习笔记- find 命令详解
- 计算机与pmac2型卡串口怎么通信,简述PMAC2型运动控制卡
- 微服务深入浅出(4)-- 负载均衡Ribbon
- C#语句之while语句
- js(一) 三大事件 实现注册验证
- [渝粤教育] 西南交通大学 工程流体力学 参考 资料
- 《了解MIPI-DSI》
- 谭浩强c语言第五版视频,张子枫平胸
- linux的vps主机安装图形界面并远程访问
- Shodan完全手册部分翻译(1)
- 内网渗透----常见后门
- 外部PLC触发VisionMaster多流程运行
- 美国硅基和宽禁带半导体供应链竞争力剖析
- qt socket通信
- 关于arm上移植电阻屏支持qt的方法
- 【uni-app基础教程】