天天看點

十年老Python程式員:給我一個連結,沒有我不能爬的視訊,隻有我頂不住的視訊一、寫在前面二、準備工作三、大緻流程四、代碼展示分析

一、寫在前面

真的,為什麼别人發遊戲這麼多人看,我發了兩次了加起來才一百個。

算了算了,不整遊戲了,反正你們也不愛看~

十年老Python程式員:給我一個連結,沒有我不能爬的視訊,隻有我頂不住的視訊一、寫在前面二、準備工作三、大緻流程四、代碼展示分析

今天來試試把頭條上扭腰上熱門的那些妹子爬一爬,不知道我頂不頂得住~

十年老Python程式員:給我一個連結,沒有我不能爬的視訊,隻有我頂不住的視訊一、寫在前面二、準備工作三、大緻流程四、代碼展示分析

二、準備工作

1、使用的環境
  • python 3.8
  • pycharm 2021.2 專業版
2、要用的第三方子產品
  • selenium
  • requests
  • parsel

三、大緻流程

鑒于你們不喜歡我啰嗦,但是流程呢,我還是要給你們寫出來,是以我就單獨把它列出來了。

十年老Python程式員:給我一個連結,沒有我不能爬的視訊,隻有我頂不住的視訊一、寫在前面二、準備工作三、大緻流程四、代碼展示分析

圖檔

1、網站分析(明确需求)
  1. 在視訊網頁源代碼當中找到 embedUrl 對應的連結;
  2. 在連結當中找到視訊播放位址,在元素面闆當中;
  3. 發現規律 embedUrl上面的 groupby_id 其實就是目前視訊連結上的id,下載下傳視訊的時候 就隻需要 一個 id 就可以下載下傳視訊;
2、代碼實作過程
  1. 建構embedUrl
  2. 使用selenium通路該連結
  3. 提取視訊連結位址
  4. 拼接視訊連結位址
  5. 使用requests發送請求 并且擷取視訊二進制資料
  6. 儲存視訊
十年老Python程式員:給我一個連結,沒有我不能爬的視訊,隻有我頂不住的視訊一、寫在前面二、準備工作三、大緻流程四、代碼展示分析

四、代碼展示分析

首先導入一下子產品

import requests
from selenium import webdriver           

複制

進入浏覽器設定

options = webdriver.ChromeOptions()           

複制

1、建構embedUrl

group_id = input("請輸入你要下載下傳視訊的id:")
url = 'https://www.ixigua.com/embed?group_id=' + group_id           

複制

無頭浏覽器

options.add_argument("--headless")           

複制

加一個僞裝

options.add_argument('User-Agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"')           

複制

2、使用selenium通路該連結

driver: 浏覽器

driver = webdriver.Chrome(executable_path="chromedriver.exe", options=options)           

複制

打開一個網頁

驅動配置: 代碼操作浏覽器的一個中間人

driver.get(url)           

複制

隐式等待: 最多等待五秒 如果一秒鐘加載完了 繼續執行

driver.implicitly_wait(5)           

複制

3、提取視訊連結位址

info = driver.find_elements_by_xpath('//*[@id="player_default"]/xg-controls/xg-definition/ul/li[1]')
video_url = info[0].get_attribute("url")           

複制

4、拼接視訊連結位址

video_url = 'http:' + video_url           

複制

5、使用requests發送請求 并且擷取視訊二進制資料

video_data = requests.get(video_url).content
with open('1.mp4', mode='wb') as f:
    f.write(video_data)           

複制

五、所有代碼

import requests
from selenium import webdriver

# 進入浏覽器設定
options = webdriver.ChromeOptions()
# 1. 建構embedUrl https://www.ixigua.com/embed?group_id=7029910152576926238
group_id = input("請輸入你要下載下傳視訊的id:")
url = 'https://www.ixigua.com/embed?group_id=' + group_id
# 無頭浏覽器
options.add_argument("--headless")
# 加一個僞裝
options.add_argument('User-Agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"')
# 2. 使用selenium通路該連結
# driver: 浏覽器
driver = webdriver.Chrome(executable_path="chromedriver.exe", options=options)
# 打開一個網頁
# 驅動配置: 代碼操作浏覽器的一個中間人
driver.get(url)
# 隐式等待: 最多等待五秒 如果一秒鐘加載完了 繼續執行
driver.implicitly_wait(5)
# 3. 提取視訊連結位址
info = driver.find_elements_by_xpath('//*[@id="player_default"]/xg-controls/xg-definition/ul/li[1]')
video_url = info[0].get_attribute("url")
# 4. 拼接視訊連結位址
video_url = 'http:' + video_url
# 5. 使用requests發送請求 并且擷取視訊二進制資料
video_data = requests.get(video_url).content
with open('1.mp4', mode='wb') as f:
    f.write(video_data)
print("爬取成功!!!")
#留了報錯,看看大家夠不夠機智找出來           

複制

兄弟們看完覺得有幫助,記得點贊三連哇~