故宫博物馆爬虫

  • 基础代码
  • 后续
  • 总代码

基础代码

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页,很多细节也没用处理。最终得到了一个文件夹。就到此结束啦!!!

故宫博物馆爬虫(简略版)相关推荐

  1. Vue 开发一个简略版的飞机大战小游戏

    文章目录 使用 Vue 开发一个简略版的飞机大战小游戏 一.实现思路 二.所需知识点 三.实现步骤 使用 Vue 开发一个简略版的飞机大战小游戏 如题,假设你为了向更多访问你博客的人展示你的技术,你决 ...

  2. 最大最小单词简略版(The Biggest and Smallest Words)

    最大最小单词简略版(The Biggest and Smallest Words) 编写程序找出一组单词中"最小"单词和"最大"单词. 用户输入单词后,程序根据 ...

  3. pandas基础学习笔记(简略版)

    pandas基础学习笔记(简略版) 1.DataFrame 2.series 3.基本数据操作 4.DataFrame 运算 5.pandas绘图 6.文本的读取与存储 1.DataFrame 既有行 ...

  4. 【python】财经数据获取_tushare简略版V1.0(备查)

    财经数据获取_tushare简略版V1.0 撰写及编辑于20201011周日 广州图书馆 主要获取列表: 1.当前所有正常上市交易的股票列表 pro.stock_basic 2.指数基础信息列表 pr ...

  5. 小白的爬虫--微博版

    小白的爬虫–微博版(一) 本贴不太涉及较多技术知识,可能仅能对刚入门爬虫的小白且有迫切爬虫任务需求的,有一定的帮助,(本人也只是小白一名,如果有技术大佬愿意指点,感激不尽), [附带源码] [http ...

  6. 22事件(简略版事件声明方式)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. 新浪微博爬虫手机版(附源码)

    上篇已经说了手机版的比较好爬,本篇就贴出一个新浪微博手机版爬虫....至于电脑版,因为我目前要用,暂时不提供分享 # coding: utf-8 ''' 以关键词收集新浪微博 ''' import w ...

  8. 故宫博物馆数字文创与新媒体传播建设方案

    故宫博物院是在明朝.清朝两代皇宫及其收藏的基础上建立起来的中国综合性博物馆,是中国收藏文物最丰富的博物馆,更是中国最大的古代文化艺术博物馆.是最具中国特色.最让中国人为之骄傲的文化名片,是当之无愧的博 ...

  9. uni-app开发App上架Apple Store流程(简略版)

    环境准备: MacBook(安装HBuilderX.XCode.Developer.TestFlight.Transporter),苹果开发者账号 详细版地址:http://t.csdn.cn/mTM ...

  10. python爬虫+网页版微信实时获取消息程序

    项目需求: 目的是24小时爬取各种软件的讯息并且以一种统一的方式集中发送给自己. 实现方法: 利用python的requests库以及wxpy库,前者用来爬取网页,后者用来将爬到的内容发送给自己. 程 ...

最新文章

  1. iscsi target 配置(服务端安装)--一
  2. iOS边练边学--CALayer,非根层隐式动画,钟表练习
  3. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 简介 | 权限申请处理细节 | 添加依赖 | 界面权限申请结果处理 | 权限申请结果回调接口 )
  4. Java Queue 使用总结
  5. linux fls函数,Linux学习笔记- find 命令详解
  6. 计算机与pmac2型卡串口怎么通信,简述PMAC2型运动控制卡
  7. 微服务深入浅出(4)-- 负载均衡Ribbon
  8. C#语句之while语句
  9. js(一) 三大事件 实现注册验证
  10. [渝粤教育] 西南交通大学 工程流体力学 参考 资料
  11. 《了解MIPI-DSI》
  12. 谭浩强c语言第五版视频,张子枫平胸
  13. linux的vps主机安装图形界面并远程访问
  14. Shodan完全手册部分翻译(1)
  15. 内网渗透----常见后门
  16. 外部PLC触发VisionMaster多流程运行
  17. 美国硅基和宽禁带半导体供应链竞争力剖析
  18. qt socket通信
  19. 关于arm上移植电阻屏支持qt的方法
  20. 【uni-app基础教程】

热门文章

  1. 网站灰色代码|哀悼日专用
  2. 云原生数据库-Amazon RDS
  3. 开展网络口碑营销之前必须做好的几件事
  4. 嗨!亲爱的朋友们,欢迎您光临我的…
  5. linpack测试工具使用说明
  6. SpringMVC-狂神笔记
  7. 处理器架构 (八) armv4v5v6 架构参考手册(4) Debug架构
  8. 程序员版--致青春(一)——facejoking刷票工具(谈刷票原理)
  9. 里去频闪的插件叫什么_冬天去海南,你才会发现什么叫“不枉此生”!
  10. codevs 2980 买帽子 题解报告