站在巨人的肩膀上抓取vip視頻播放地址
此文章僅僅為練習(xí)簡(jiǎn)單爬蟲(chóng)所作.
簡(jiǎn)單爬蟲(chóng)三步曲
1.明確需求,找到能夠滿足需求的網(wǎng)頁(yè)
目標(biāo):給我一個(gè)官方播放vip電影的地址,輸出一個(gè)能夠放在瀏覽器直接播放電影的鏈接
如何解析各大主流視頻網(wǎng)站的視頻原播放地址,已經(jīng)有巨人做好了.搜索視頻解析 這里僅僅做個(gè)猜想:前期需要對(duì)播放視頻網(wǎng)站進(jìn)行抓包,篩掉無(wú)關(guān)請(qǐng)求,挨個(gè)分析剩下的.從后往前分析會(huì)更好,因?yàn)樽罱K一定有可以可以播放的鏈接被抓包到,并且現(xiàn)在電影多數(shù)都是分段式的,一個(gè)電影可以分成成百上千個(gè)小段.這些小段視頻鏈接的拼接規(guī)則則要去前面的請(qǐng)求分析得來(lái),不多贅述.
我們搜索解析視頻
后直接選取第一個(gè)全民解析-vip視頻在線解析 借助這個(gè)視頻解析平臺(tái)實(shí)現(xiàn)既定的需求.
2.分析網(wǎng)頁(yè)html,定位目標(biāo)數(shù)據(jù)
可以看到在播放地址欄粘貼原官方播放地址后點(diǎn)擊Go-點(diǎn)擊開(kāi)始解析稍等即可播放
看看點(diǎn)擊時(shí)觸發(fā)什么事件.右擊按鈕,選擇檢查即可定位到指定html元素位置.
我們可以發(fā)現(xiàn)到一個(gè)叫做dihejk()
的點(diǎn)擊事件,分析后發(fā)現(xiàn)它最終要拿到下面三個(gè)option中的選中的一個(gè)的value.
<option value="http://jx.598110.com/zuida.php?url=" selected="">③號(hào)通用vip引擎系統(tǒng)【穩(wěn)定通用】</option>
<option value="http://jx.598110.com/duo/index.php?url=" selected="">②號(hào)通用vip多線路系統(tǒng)【穩(wěn)定通用】</option>
<option value="http://jx.598110.com/index.php?url=" selected="">①號(hào)通用vip引擎系統(tǒng)【穩(wěn)定通用】</option>
選擇http://jx.598110.com/zuida.php?url=
嘗試在 url
后拼接上視頻官方播放的地址,在瀏覽器中粘貼竟短暫等待后就直接播放了.
3.爬取整個(gè)html內(nèi)容,寫(xiě)正則將目標(biāo)數(shù)據(jù)揪出來(lái)
那么接下來(lái)的事情就是寫(xiě)代碼爬取這個(gè)網(wǎng)站的html.將這三個(gè) option value
的值匹配出來(lái).上代碼
import re
from urllib import request
if __name__ == '__main__':
# 視頻原播放url 示例: http://www.iqiyi.com/v_19rr9tql50.html
origin_vip_url = input('please input original url')
# 這個(gè)網(wǎng)頁(yè)中藏著用于解析視頻播放url的url們
qmail_url = 'http://www.qmaile.com/'
# head配置
head = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Referer': "http://www.qmaile.com/"
}
# 創(chuàng)建一個(gè)request
qmail_url_req = request.Request(url = qmail_url, headers = head)
# 獲得數(shù)據(jù)
qmail_url_res = request.urlopen(qmail_url_req)
# 轉(zhuǎn)換成html
res_html = qmail_url_res.read().decode('utf-8')
# 正則
pat = '<option value="(.*?)\?'
# 找出三個(gè)用于解析視頻地址的目標(biāo)url們
target_parse_urls = re.findall(pat, res_html, re.S)
result_play_url = []
if len(target_parse_urls) > 0:
for each_parse_url in target_parse_urls:
each_play_url = each_parse_url + '?' + 'url=' + origin_vip_url
result_play_url.append(each_play_url)
else:
print('沒(méi)有找到')
# 最后一個(gè)比較好使
print(result_play_url)
在命令行執(zhí)行該模塊,輸入想解析的官方播放地址,即可生成三個(gè)直接播放地址.
換一個(gè)平臺(tái)基本上也就是差不多的流程.借助別人的平臺(tái),實(shí)現(xiàn)這個(gè)需求似乎并不難.難的是解析視頻的過(guò)程,下次再深入討論