xpath–簡單的爬蟲實體–提取陰陽師原畫壁紙
文章目錄
- 一、前言
- 二、需要用到的庫
- 三、實作程序
- 1、分析網頁
- 2、完整代碼實作
- 四、合成視頻
一、前言
很多人都玩過陰陽師吧,別的不談,陰陽師的原畫制作的那是相當地精細,閑暇之余,用幾行簡單的代碼爬取下來,豈不美哉?
二、需要用到的庫
import requests
from lxml import etree
from fake_useragent import UserAgent
import os
沒用安裝庫的小伙伴,可以看一下我之前寫的這篇文章,里面有很多國內源的鏈接,方便你的下載,
傳送門
三、實作程序
1、分析網頁
首先打開官網,官網傳送門,點擊“視聽中心”里面的“原畫壁紙”

進入到原畫壁紙頁面后,選擇一個壁紙,進行檢查,

我發現,對于不同的解析度,有不同的鏈接對應,而我檢查的這張圖有六個解析度,是不是所有的圖片都是這樣呢?
后來我發現,并不是!

如上所示,有個圖甚至只有四個解析度,并且,每張圖的解析度的位置對應還不一致,那該怎么提取原畫鏈接呢?
A:利用xpath,根據文本內容提取節點
a = lists[i].xpath('./div/div/a[contains(text(), "1920x1080")]')[0]
這樣就能提取到解析度為“1920x1080”的a節點了,
Q:lists[i]是什么?
A:看了完整代碼就知道了,
2、完整代碼實作
import requests
from lxml import etree
from fake_useragent import UserAgent
import os
path = 'D:/陰陽師'
if not os.path.exists(path):
os.mkdir(path)
# 隨機產生請求頭
ua = UserAgent(verify_ssl=False, path='fake_useragent.json')
url = 'https://yys.163.com/media/picture.html' # 原畫壁紙的頁面鏈接
response = requests.get(url=url).text
html = etree.HTML(response)
lists = html.xpath('/html/body/div[2]/div[3]/div[1]/div[3]/div[2]/div')
num = 1
for i in range(len(lists)):
a = lists[i].xpath('./div/div/a[contains(text(), "1920x1080")]')[0] # 根據文本內容鎖定節點a
image_url = a.xpath('./@href')[0] # 獲取原畫壁紙鏈接
image_data = requests.get(url=image_url).content
image_name = '{}.jpg'.format(num) # 給每張圖片命名
save_path = path + '/' + image_name # 圖片的保存地址
with open(save_path, 'wb') as f:
f.write(image_data)
print(image_name, '=======================>下載成功!!!')
f.close()
num += 1
運行結果如下:


四、合成視頻
通過合成視頻,可以慢慢欣賞爬取下來的原畫,舒服極了,
代碼如下:
import cv2
import os
# 輸出視頻的保存路徑
video_dir = 'D:/yinyangshi/result.mp4'
# 幀率
fps = 0.2
# 圖片尺寸
img_size = (1920, 1080)
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V') # opencv3.0 mp4會有警告但可以播放
videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
img_files = os.listdir('D:/yinyangshi/')
for i in range(1, 397):
img_path = 'D:/yinyangshi/tupian/' + '{}.jpg'.format(i)
frame = cv2.imread(img_path)
frame = cv2.resize(frame, img_size) # 生成視頻 圖片尺寸和設定尺寸相同
videoWriter.write(frame) # 寫進視頻里
print(f'======== 按照視頻順序第{i}張圖片合進視頻 ========')
videoWriter.release() # 釋放資源
注意:合成視頻時,圖片的保存路徑和視頻的生成路徑不能包含中文!!!
嗶哩嗶哩鏈接:https://www.bilibili.com/video/BV1Kp4y1W7yB
陰陽師原畫合集
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263831.html
標籤:python
下一篇:IO(字符流)+屬性集+緩沖流
