前言
大家早好、午好、晚好吖~
環境使用:
-
Python 3.8
-
Pycharm
模塊使用:
- import requests >>> pip install requests
內置模塊 你安裝好python環境就可以了
-
import re
-
import json
模塊安裝問題:
如果安裝python第三方模塊:
-
win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
-
在pycharm中點擊Terminal(終端) 輸入安裝命令
安裝失敗原因:
-
<font color =red >失敗一: pip 不是內部命令</font>
解決方法: 設定環境變數
-
<font color =red >失敗二: 出現大量報紅 (read time out)</font>
解決方法: 因為是網路鏈接超時, 需要切換鏡像源
清華:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple/
中國科技大學 https://pypi.mirrors.ustc.edu.cn/simple/
華中理工大學:https://pypi.hustunique.com/
山東理工大學:https://pypi.sdutlinux.org/
豆瓣:https://pypi.douban.com/simple/例如:pip3 install -i https://pypi.doubanio.com/simple/ 模塊名
-
<font color =red >失敗三: cmd里面顯示已經安裝過了, 或者安裝成功了, 但是在pycharm里面還是無法匯入</font>
解決方法: 可能安裝了多個python版本 (anaconda 或者 python 安裝一個即可) 卸載一個就好
或者你pycharm里面python解釋器沒有設定好
如何配置pycharm里面的python解釋器?
-
選擇file(檔案) >>> setting(設定) >>> Project(專案) >>> python interpreter(python解釋器)
-
點擊齒輪, 選擇add
-
添加python安裝路徑
pycharm如何安裝插件?
-
選擇file(檔案) >>> setting(設定) >>> Plugins(插件)
-
點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese
-
選擇相應的插件點擊 install(安裝) 即可
-
安裝成功之后 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效
?? ?? ?? 原始碼、教程 領取
==資料點擊 藍色字體 自取== ,我都放在這里了,
如何實作蟲案例: <思路流程 --> 通用>
一. 資料來源分析
- 分析清楚我們想要資料內容, 是在什么地方, 什么樣子的
使用開發者工具進行抓包分析: 視頻資料以及視頻標題
I. F12 或者 右鍵點擊檢查選擇network 重繪網頁
這么多資料包, 我想要視頻資料在什么地方?
- M3U8 視頻格式: 把整個完整的視頻內容, 分為N個視頻片段, 每個片段都是幾秒鐘 <看多少就加載多少>
所有視頻片段 <ts檔案> 都包含在 m3u8 的檔案鏈接里面
II. 在開發者工具里面 直接搜索m3u8 可以直接找相對應鏈接地址
繼續分析 這個 m3u8 url地址是從哪里過來 在什么地方有
III. 我們想要視頻資料 <m3u8鏈接> 在 網頁源代碼里面有
獲取整個視頻內容 ---> 分為N個視頻片段<ts檔案> ---> 在m3u8鏈接里面 ---> 視頻播放詳情頁網頁源代碼里面
二. 代碼實作步驟:
-
發送請求, 模擬瀏覽器對于視頻播放詳情頁url發送請求
-
獲取資料, 獲取服務器回傳回應資料
開發者工具里 response -
決議資料, 提取我們想要的資料內容
- m3u8鏈接
- 視頻標題 -
發送請求, 模擬瀏覽器對于 m3u8鏈接 發送請求
由第三步提取出來鏈接發送請求 -
獲取資料, 獲取服務器回傳回應資料
開發者工具里response<對應所有ts檔案鏈接> -
決議資料, 提取我們想要的資料內容
所有ts檔案鏈接 -
保存資料, 把所有視頻片段內容保存下來, 并且合成為一個完整視頻內容
-
多頁資料采集
代碼展示
?? ?? ?? 原始碼、教程 領取
==資料點擊 藍色字體 自取== ,我都放在這里了,
匯入模塊
# 匯入資料請求模塊 ---> 要安裝 在cmd里面 pip install requests import requests # 匯入正則模塊 ---> 內置模塊 不需要安裝 import re # 匯入json模塊 ---> 內置模塊 不需要安裝 import json # 匯入格式化輸出模塊 ---> 內置模塊 不需要安裝 from pprint import pprint
1. 發送請求, 模擬瀏覽器對于 視頻播放詳情頁url 發送請求
-
偽裝代碼 --> headers 請求頭
-
在開發者工具里面進行復制粘貼
<UA, cookie host referer> -
請求頭 字典資料型別, 構建完整鍵值對
-
-
<Response [200]>回應物件200 狀態碼 表示請求成功
如果想要多個視頻內容, 就要把視頻ID獲取下來 <動態資料加載>
分段寫請求鏈接:
-
問號左邊的內容 屬于鏈接
-
問號右邊的內容 屬于請求引數/查詢引數
批量替換內容:
-
選中替換的內容, 按
ctrl + R點選正則<.*> -
正則命令匹配資料 替換
(.*?): (.*) '$1': '$2',
請求鏈接
請求引數
data =https://www.cnblogs.com/Qqun261823976/archive/2022/10/28/ { 'quickViewId': 'ac-space-video-list', 'reqID': '13', 'ajaxpipe': '1', 'type': 'video', 'order': 'newest', 'page': '2', 'pageSize': '20', 't': '1666360290070', }
模擬偽裝
headers = { # User-Agent 用戶代理 表示瀏覽器基本身份資訊 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' }
發送請求
response_1 = requests.get(url=link, params=data, headers=headers)
決議資料
video_id_list = re.findall('atomid.*?":.*?"(\d+).*?",', response_1.text) # for回圈遍歷 for video_id in video_id_list:
# 發送請求 response = requests.get(url=url, headers=headers)
2. 獲取資料, 獲取服務器回傳回應資料
- 開發者工具里 response
response.text 獲取回應文本資料 <網頁源代碼>
3. 決議資料, 提取我們想要的資料內容
-
m3u8鏈接
-
視頻標題
呼叫re模塊里面findall方法, 去找到所有我們想要的資料內容
re.findall('什么資料', '什么地方')
從什么地方去找你想要的什么資料
從 response.text 這里面 去找 "title":"(.*?)", 其中 (.*?) 是我們要的資料
[1] 串列索引位置取值
表示提取串列里面第二個元素
提取標題
title = re.findall('"title":"(.*?)",', response.text)[1]
提取視頻資訊
--> 字串資料型別
html_data = https://www.cnblogs.com/Qqun261823976/archive/2022/10/28/re.findall('window.pageInfo = window.videoInfo = (.*?);', response.text)[0]
轉資料型別: 方便取值
---> 字典資料型別 鍵值對取值: 根據冒號左邊的內容[鍵], 提取冒號右邊的內容[值]
json_data = https://www.cnblogs.com/Qqun261823976/archive/2022/10/28/json.loads(html_data)
提取 m3u8鏈接
m3u8_url = json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0]
4. 發送請求, 模擬瀏覽器對于 m3u8鏈接 發送請求
由第三步提取出來鏈接發送請求
5. 獲取資料, 獲取服務器回傳回應資料
開發者工具里 response <對應所有ts檔案鏈接
xpath 標簽節點提取資料內容
re 是可以直接對于字串資料進行決議提取
css 根據標簽屬性提取資料內容
requests parsel re csv selenium
# 發送請求 + 獲取資料
m3u8_data = https://www.cnblogs.com/Qqun261823976/archive/2022/10/28/requests.get(url=m3u8_url, headers=headers).text
# 提取我們想要ts鏈接 跟上 6 有不明白 5 split() 分割字串分割 --> 串列
m3u8_data = re.sub('#E.*', '', m3u8_data).split()
print(title)
# for回圈遍歷 提取我們想要ts檔案鏈接, 把串列里面元素 一個一個提取出來
for ts in m3u8_data:
字串拼接 構建完整鏈接地址
7. 保存資料
--> 需要發送請求 + 獲取資料
ts_content = requests.get(url=ts_url, headers=headers).content
with open('video\\' + title + '.mp4', mode='ab') as f:
# 寫入資料
f.write(ts_content)
print(ts_url)







文章看不懂,我專門錄了對應的視頻講解,本文只是大致展示,完整代碼和視頻教程點擊下方藍字
==點擊 藍色字體 自取,我都放在這里了,==
寧外給大家推薦一個好的教程:
【48小時搞定全套教程!你和大佬只有一步之遙【python教程】
尾語 ??
好了,我的這篇文章寫到這里就結束啦!
有更多建議或問題可以評論區或私信我哦!一起加油努力叭(? ?_?)?
喜歡就關注一下博主,或點贊收藏評論一下我的文章叭!!!
前言
大家早好、午好、晚好吖~
環境使用:
-
Python 3.8
-
Pycharm
模塊使用:
- import requests >>> pip install requests
內置模塊 你安裝好python環境就可以了
-
import re
-
import json
模塊安裝問題:
如果安裝python第三方模塊:
-
win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
-
在pycharm中點擊Terminal(終端) 輸入安裝命令
安裝失敗原因:
-
<font color =red >失敗一: pip 不是內部命令</font>
解決方法: 設定環境變數
-
<font color =red >失敗二: 出現大量報紅 (read time out)</font>
解決方法: 因為是網路鏈接超時, 需要切換鏡像源
清華:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple/
中國科技大學 https://pypi.mirrors.ustc.edu.cn/simple/
華中理工大學:https://pypi.hustunique.com/
山東理工大學:https://pypi.sdutlinux.org/
豆瓣:https://pypi.douban.com/simple/例如:pip3 install -i https://pypi.doubanio.com/simple/ 模塊名
-
<font color =red >失敗三: cmd里面顯示已經安裝過了, 或者安裝成功了, 但是在pycharm里面還是無法匯入</font>
解決方法: 可能安裝了多個python版本 (anaconda 或者 python 安裝一個即可) 卸載一個就好
或者你pycharm里面python解釋器沒有設定好
如何配置pycharm里面的python解釋器?
-
選擇file(檔案) >>> setting(設定) >>> Project(專案) >>> python interpreter(python解釋器)
-
點擊齒輪, 選擇add
-
添加python安裝路徑
pycharm如何安裝插件?
-
選擇file(檔案) >>> setting(設定) >>> Plugins(插件)
-
點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese
-
選擇相應的插件點擊 install(安裝) 即可
-
安裝成功之后 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效
?? ?? ?? 原始碼、教程 領取
==資料點擊 藍色字體 自取== ,我都放在這里了,
如何實作蟲案例: <思路流程 --> 通用>
一. 資料來源分析
- 分析清楚我們想要資料內容, 是在什么地方, 什么樣子的
使用開發者工具進行抓包分析: 視頻資料以及視頻標題
I. F12 或者 右鍵點擊檢查選擇network 重繪網頁
這么多資料包, 我想要視頻資料在什么地方?
- M3U8 視頻格式: 把整個完整的視頻內容, 分為N個視頻片段, 每個片段都是幾秒鐘 <看多少就加載多少>
所有視頻片段 <ts檔案> 都包含在 m3u8 的檔案鏈接里面
II. 在開發者工具里面 直接搜索m3u8 可以直接找相對應鏈接地址
繼續分析 這個 m3u8 url地址是從哪里過來 在什么地方有
III. 我們想要視頻資料 <m3u8鏈接> 在 網頁源代碼里面有
獲取整個視頻內容 ---> 分為N個視頻片段<ts檔案> ---> 在m3u8鏈接里面 ---> 視頻播放詳情頁網頁源代碼里面
二. 代碼實作步驟:
-
發送請求, 模擬瀏覽器對于視頻播放詳情頁url發送請求
-
獲取資料, 獲取服務器回傳回應資料
開發者工具里 response -
決議資料, 提取我們想要的資料內容
- m3u8鏈接
- 視頻標題 -
發送請求, 模擬瀏覽器對于 m3u8鏈接 發送請求
由第三步提取出來鏈接發送請求 -
獲取資料, 獲取服務器回傳回應資料
開發者工具里response<對應所有ts檔案鏈接> -
決議資料, 提取我們想要的資料內容
所有ts檔案鏈接 -
保存資料, 把所有視頻片段內容保存下來, 并且合成為一個完整視頻內容
-
多頁資料采集
代碼展示
?? ?? ?? 原始碼、教程 領取
==資料點擊 藍色字體 自取== ,我都放在這里了,
匯入模塊
# 匯入資料請求模塊 ---> 要安裝 在cmd里面 pip install requests
import requests
# 匯入正則模塊 ---> 內置模塊 不需要安裝
import re
# 匯入json模塊 ---> 內置模塊 不需要安裝
import json
# 匯入格式化輸出模塊 ---> 內置模塊 不需要安裝
from pprint import pprint
1. 發送請求, 模擬瀏覽器對于 視頻播放詳情頁url 發送請求
-
偽裝代碼 --> headers 請求頭
-
在開發者工具里面進行復制粘貼
<UA, cookie host referer> -
請求頭 字典資料型別, 構建完整鍵值對
-
-
<Response [200]>回應物件200 狀態碼 表示請求成功
如果想要多個視頻內容, 就要把視頻ID獲取下來 <動態資料加載>
分段寫請求鏈接:
-
問號左邊的內容 屬于鏈接
-
問號右邊的內容 屬于請求引數/查詢引數
批量替換內容:
-
選中替換的內容, 按
ctrl + R點選正則<.*> -
正則命令匹配資料 替換
(.*?): (.*)
'$1': '$2',
請求鏈接
請求引數
data = https://www.cnblogs.com/Qqun261823976/archive/2022/10/28/{
'quickViewId': 'ac-space-video-list',
'reqID': '13',
'ajaxpipe': '1',
'type': 'video',
'order': 'newest',
'page': '2',
'pageSize': '20',
't': '1666360290070',
}
模擬偽裝
headers = {
# User-Agent 用戶代理 表示瀏覽器基本身份資訊
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
發送請求
response_1 = requests.get(url=link, params=data, headers=headers)
決議資料
video_id_list = re.findall('atomid.*?":.*?"(\d+).*?",', response_1.text)
# for回圈遍歷
for video_id in video_id_list:
# 發送請求
response = requests.get(url=url, headers=headers)
2. 獲取資料, 獲取服務器回傳回應資料
- 開發者工具里 response
response.text 獲取回應文本資料 <網頁源代碼>
3. 決議資料, 提取我們想要的資料內容
-
m3u8鏈接
-
視頻標題
呼叫re模塊里面findall方法, 去找到所有我們想要的資料內容
re.findall('什么資料', '什么地方')
從什么地方去找你想要的什么資料
從 response.text 這里面 去找 "title":"(.*?)", 其中 (.*?) 是我們要的資料
[1] 串列索引位置取值
表示提取串列里面第二個元素
提取標題
title = re.findall('"title":"(.*?)",', response.text)[1]
提取視頻資訊
--> 字串資料型別
html_data = https://www.cnblogs.com/Qqun261823976/archive/2022/10/28/re.findall('window.pageInfo = window.videoInfo = (.*?);', response.text)[0]
轉資料型別: 方便取值
---> 字典資料型別 鍵值對取值: 根據冒號左邊的內容[鍵], 提取冒號右邊的內容[值]
json_data = https://www.cnblogs.com/Qqun261823976/archive/2022/10/28/json.loads(html_data)
提取 m3u8鏈接
m3u8_url = json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0]
4. 發送請求, 模擬瀏覽器對于 m3u8鏈接 發送請求
由第三步提取出來鏈接發送請求
5. 獲取資料, 獲取服務器回傳回應資料
開發者工具里 response <對應所有ts檔案鏈接
xpath 標簽節點提取資料內容
re 是可以直接對于字串資料進行決議提取
css 根據標簽屬性提取資料內容
requests parsel re csv selenium
# 發送請求 + 獲取資料
m3u8_data = https://www.cnblogs.com/Qqun261823976/archive/2022/10/28/requests.get(url=m3u8_url, headers=headers).text
# 提取我們想要ts鏈接 跟上 6 有不明白 5 split() 分割字串分割 --> 串列
m3u8_data = https://www.cnblogs.com/Qqun261823976/archive/2022/10/28/re.sub('#E.*', '', m3u8_data).split()
print(title)
# for回圈遍歷 提取我們想要ts檔案鏈接, 把串列里面元素 一個一個提取出來
for ts in m3u8_data:
字串拼接 構建完整鏈接地址
7. 保存資料
--> 需要發送請求 + 獲取資料
ts_content = requests.get(url=ts_url, headers=headers).content
with open('video\\' + title + '.mp4', mode='ab') as f:
# 寫入資料
f.write(ts_content)
print(ts_url)
文章看不懂,我專門錄了對應的視頻講解,本文只是大致展示,完整代碼和視頻教程點擊下方藍字
==點擊 藍色字體 自取,我都放在這里了,==
寧外給大家推薦一個好的教程:
【48小時搞定全套教程!你和大佬只有一步之遙【python教程】
尾語 ??
好了,我的這篇文章寫到這里就結束啦!
有更多建議或問題可以評論區或私信我哦!一起加油努力叭(? ?_?)?
喜歡就關注一下博主,或點贊收藏評論一下我的文章叭!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522888.html
標籤:其他
上一篇:三、回圈陳述句基礎
