好了,又來到了大家最喜歡的整活環節,爬小姐姐視頻,本來爬正經視頻的,但是想了想,還是要整點實用的,那必須換成小姐姐,直接整活!
用的環境是Python3.6和pycharm,需要安裝一個瀏覽器驅動(谷歌或者火狐的都可以,跟瀏覽器版本相近就行)沒有的小伙伴可以加這個群點我免費加群領取 包括本次的完整代碼,視頻教程都在群里免費領取。
很多小伙伴在學習的過程中因為沒有好的學習資料、學習路線,或者遇到問題得不到及時解決導致自己學習進度緩慢,甚至放棄學習了,在這里我統統都給大家准備好了,從零基礎到實戰,各個方向的學習路線統統免費送給大家,學習問題都可以在群里得到解答,點我免費領取
本次要用到的模塊
requests >>> pip install requests selenium >>> pip install selenium re os
一. 數據來源分析
- 確定需求 (我們要爬的內容是什么?)
抖音視頻內容 - 通過開發者工具進行抓包分析
I. (F12/鼠標右鍵點擊檢查可以打開) 選擇network 選擇 media 找播放地址
II. 找播放地址來源 >>>
爬一個視頻
二. 代碼實現過程
- 發送請求 對於視頻詳情頁發送請求
- 獲取數據 獲取網頁源代碼數據
- 解析數據 提取視頻播放地址 以及視頻標題
- 下載保存
各個模塊的作用
import requests # 數據請求 第三方模塊 pip install requests import re # 正則表達式模塊 import os # 文件操作模塊 import time # 時間模塊 from selenium import webdriver # pip install selenium
自動判斷有無文件夾,自動創建,文件夾名字可以自己隨便命名,這里我們創建名字為video,這里也可以自己先創建一個相同名字的文件夾放在代碼旁邊。
filename = 'video\\' # 文件名字 if not os.path.exists(filename): # 判斷如果沒有這個文件夾的話 os.mkdir(filename) # 創建這個文件
很多文件下載下來后名字帶有特殊符號的,這時候我們就要把這些特殊符號給替換掉,不然不能保存。
def change_title(title): pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|\n]") # '/ \ : * ? " < > |' new_title = re.sub(pattern, "_", title) # 替換為下划線 return new_title
這一步需要安裝好瀏覽器驅動,selenium 可以模擬人的行為去操作瀏覽器,模擬滑動操作。自己翻的話,多麻煩是吧。驗證碼沒有寫進來,需要自己手動過一下驗證碼。
def drop_down(): """執行頁面滾動的操作""" # javascript for x in range(1, 30, 4): # 在你不斷的下拉過程中, 頁面高度也會變的 time.sleep(1) j = x / 9 # document.documentElement.scrollTop 指定滾動條的位置 # document.documentElement.scrollHeight 獲取瀏覽器頁面的最大高度 js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j driver.execute_script(js)
實例化一個瀏覽器的對象
driver = webdriver.Chrome()
訪問url地址網址
driver.get('.......')
括號里面的內容替換成你想要爬取的博主,我就不放鏈接了,免得審核不過。
截個圖吧,這里以他為例,具體是誰,懂得都懂。
不,我不懂~
怎么找地址呢,在當前頁面鏈接中把?之前的都復制下來放進括號里面替換掉… 這幾個點。
返回的列表 里面元素是對象
lis = driver.find_elements_by_css_selector('div._927ae3b0dd790b5b62eae61c7d2fa0bc-scss > div:nth-child(2) > ul li')
調用 find_element_by_css_selector() 方法
li_url = li.find_element_by_css_selector('a').get_attribute('href')
headers 請求頭 偽裝作用,user-agent: 瀏覽器的基本信息。
headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36' } response = requests.get(url=li_url, headers=headers)
獲取數據 response.text 獲取響應體的文本數據
print(response.text)
解析數據 通過 re 正則表達式
正則表達式匹配出來的內容是列表
貪婪模式[我全都要] 非貪婪模式(?)
title = re.findall('<title data-react-helmet="true"> (.*?)</title>', response.text, re.S)[0] new_title = change_title(title)
返回是列表沒問題, [1] 索引取值 第一個元素索引位置是0 第二個元素索引位置 1。
html_data = re.findall('src(.*?)vr%3D%2', response.text)[1]
解碼
video_url = requests.utils.unquote(html_data).replace('":"', 'http:')
print(video_url)保存數據,response.content (獲取響應體的二進制數據),為什么我要獲取二進制數據呢,如果要保存圖片/視頻/音頻/特定格式的文件,都是二進制數據保存的。
video_content = requests.get(url=video_url, headers=headers).content
mode 保存方式, w 是寫入, b 二進制模式 ,wb 以二進制方式保存, mode 默認是, r 讀取,as 重命名 f。
然后看一下效果
兄弟們,沖沖沖!還是新鮮的,只要你去試了,必然是成功的,如果你連試都沒試,那當我沒說,文章如果看不懂,可以進那個群看視頻!工具軟件都有現成的直接找管理要就好了!