故宫博物院网站内容(故宫博物馆爬虫基础代码get_details这个函数提取上图)

优采云 发布时间: 2022-01-28 21:17

  故宫博物院网站内容(故宫博物馆爬虫基础代码get_details这个函数提取上图)

  故宫博物院爬行动物

  基本代码

  import requests,re,time

from lxml import etree

url = 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 html

def 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#拼接url

return 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_采集_details提取出上图所示的馆藏编号、名称、时代等信息,但无法通过xpath定位。爬取的源代码显示类似 document.write("...") 的内容。

  

  "//tbody[@id='tabBodyLeft']" 无法定位,无法完成后续所有数据提取和清理。

  跟进

  这可能会在js运行后显示在页面上。不,如果不清楚,就乱来。

  

  找出它,单击响应,然后查看其数据:

  "rname":"任明峰花集","rnum":"So 00005019-2/12"},{"id":4221760,"rera":"清","rname":"任明峰花集" ,"rnum":"So 00005019-3/12"},{"id":4221761,"rera":"Qing","rname":"任明峰花书","rnum":"So 00005019-4 /12" },{"id":4221762,"rera":"清","rname":"任明峰花书","rnum":"所以00005019-5/12"},{"id": 4221763,"rera":"清","rname":"任明峰花集","rnum":"所以00005019-6/12"},{"id":4221764,"rera":"清", “重名”:“任铭峰花专辑》,《rnum》:《So 00005019-7/12》}]};

  这是信息的一部分,就像它没有加载到页面上一样。

  然后复制其网址,如:,

  

  显示如上图,汉字编码格式错误,无法正确显示,但里面的属性,id,rera,rname,正好是三个属性,分别对应。所有的工作都解决了,唯一可能存在的就是字体反爬了,必须找到对应的文件才能解决。

  

  

  

  分析每个js文件对应页面的六页内容,链接的其他信息是一样的。由此得到链接格式模板,链接微调可以多页爬取。

  总码

  所有分析都是汇总的,加上部分实现。

  import requests,re,time

from lxml import etree

url = 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 html

def 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#拼接url

return 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).text

name = 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个页面,很多细节都没用。终于有文件夹了。而已!!!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线