欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

使用python爬蟲,批量爬取抖音app視頻

系統 2447 0

抖音很火,樓主使用python隨機爬取抖音視頻,并且無水印下載,人家都說天下沒有爬不到的數據,so,樓主決定試試水,純屬技術愛好,分享給大家。。

1.樓主首先使用Fiddler4來抓取手機抖音app這個包,具體配置的操作,網上有很多教程供大家參考。

使用python爬蟲,批量爬取抖音app視頻(requests+Fiddler+appium)_第1張圖片

使用python爬蟲,批量爬取抖音app視頻(requests+Fiddler+appium)_第2張圖片

上面得出抖音的視頻的url,這些url均能在網頁中打開,樓主數了數,這些url的前綴有些不同,一共有這4種類型:

v1-dy.ixigua.com

v3-dy.ixigua.com

v6-dy.ixigua.com

v9-dy.ixigua.com

樓主查看這四種類型得知,v6-dy.ixigua.com 這個前綴后面的參數其中有一個是Expires(中文含義過期的意思) image

Expires=1536737310,這個是時間戳,標記的是過期的時間如下圖所示,過了15:28分30秒,則表示url不能使用,樓主算了一下,url有效期是一個小時。

image

看到這些url,樓主不能手動一個一個粘貼,so樓主需要在+Fiddler4中(在Fiddler4使用script代碼網上有大量詳細教程)使用如下代碼,自動保存到一個txt文檔中。

            
              //保存到本地添加開始
        
        //這是抖音的地址||"v1-dy.ixigua.com"||"v3-dy.ixigua.com"||"v6-dy.ixigua.com"||"v9-dy.ixigua.com"||
        if (oSession.fullUrl.Contains("v1-dy.ixigua.com")||
            oSession.fullUrl.Contains("v3-dy.ixigua.com")||
            oSession.fullUrl.Contains("v6-dy.ixigua.com")||
            oSession.fullUrl.Contains("v9-dy.ixigua.com")){
            
            var fso;
            var file;
            fso = new ActiveXObject("Scripting.FileSystemObject");
            //文件保存路徑,可自定義
            file = fso.OpenTextFile("H:\\Request.txt",8 ,true);
            //file.writeLine("Request-url:" + oSession.url);
            file.writeLine("http://"+oSession.url)
            //file.writeLine("Request-host:" + oSession.host);
            //file.writeLine("Request-header:" + "\n" + oSession.oRequest.headers);
            //file.writeLine("Request-body:" + oSession.GetRequestBodyAsString());
            //file.writeLine("\n");
            file.close();
        }        
        //保存到本地添加結束

            
          

把上邊的代碼插入到如下圖所示的地方即可。

使用python爬蟲,批量爬取抖音app視頻(requests+Fiddler+appium)_第3張圖片

2.上面的url是樓主手動點擊一個個刷新抖音app出現的,so樓主使用appium來自動刷新抖音app,自動獲得url,自動保存到txt文檔中。

首先需要在appium中得到抖音這個app包的一些用的信息,如下圖所示

使用python爬蟲,批量爬取抖音app視頻(requests+Fiddler+appium)_第4張圖片

樓主使用的是紅米手機,至于appium怎么安裝配置,大家可參考網上相關教程,appium客戶端連接上手機(需要數據線連接)后,在控制臺打印出log日志文件,在日志文件中找到這四個參數即可,然后保存

到appium客戶端中即可,就能在appium客戶端中操作抖音app。

{
? “platformName”: “Android”,
? “deviceName”: “Redmi Note5”,
? “appPackage”: “com.ss.android.ugc.aweme”,
? “appActivity”: “.main.MainActivity”
}

appPackage這一項com.ss.android.ugc.aweme 則表示抖音短視頻。

image

image

樓主使用如下代碼來實現無限刷新抖音app,前提是需要手機連著數據線連在電腦上并且開啟appium客戶端的服務和打開Fiddler4抓包(配置好環境手機)。

            
              from appium import webdriver
from time import sleep
'''
遇到不懂的問題?Python學習交流群:821460695滿足你的需求,資料都已經上傳群文件,可以自行下載!
'''
##以下代碼可以操控手機app
class Action():
    def __init__(self):
        # 初始化配置,設置Desired Capabilities參數
        self.desired_caps = {
            "platformName": "Android",
            "deviceName": "Mi_Note_3",
            "appPackage": "com.ss.android.ugc.aweme",
            "appActivity": ".main.MainActivity"
        }
        # 指定Appium Server
        self.server = 'http://localhost:4723/wd/hub'
        # 新建一個Session
        self.driver = webdriver.Remote(self.server, self.desired_caps)
        # 設置滑動初始坐標和滑動距離
      self.start_x = 500
        self.start_y = 1500
        self.distance = 1300

    def comments(self):
        sleep(3)
        # app開啟之后點擊一次屏幕,確保頁面的展示
        self.driver.tap([(500, 1200)], 500)
    def scroll(self):
        # 無限滑動
        while True:
            # 模擬滑動
            self.driver.swipe(self.start_x, self.start_y, self.start_x,
            self.start_y - self.distance)
            # 設置延時等待
            sleep(5)
    def main(self):
        self.comments()
        self.scroll()

if __name__ == '__main__':
    action = Action()
    action.main()

            
          

樓主運行次代碼就能在Fiddler4中得到無限量的url。
3.樓主拿到url后,會發現有些url會重復,so樓主加入了去重的功能,為了好看樓主也加入了進度條花里花哨的功能,運行代碼最終會下載下來。

            
              # _*_ coding: utf-8 _*_
import requests
import sys
'''
遇到不懂的問題?Python學習交流群:821460695滿足你的需求,資料都已經上傳群文件,可以自行下載!
'''
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36" }

##去重方法
def distinct_data():
    ##讀取txt中文檔的url列表
    datalist_blank=[]
    pathtxt='H:/Request.txt'
    with open(pathtxt) as f:
        f_data_list=f.readlines()#d得到的是一個list類型
        for a in f_data_list:
            datalist_blank.append(a.strip())#去掉\n strip去掉頭尾默認空格或換行符
    # print(datalist)
    data_dict={}
    for data in datalist_blank:
        #print(type(data),data,'\n')
        #print(data.split('/'),'\n',data.split('/').index('m'),'\n')
        #url中以/為切分,在以m為切分   ##把m后面的值放進字典key的位置,利用字典特性去重
        if int(data.split('/').index('m'))==4 :#此處為v6開頭的url
            #print(data,44,data.split('/')[5])
            data_key1=data.split("/")[5]
            data_dict[data_key1]=data
        elif int(data.split('/').index('m'))==6: #此處為v1或者v3或者v9開頭的url
            #print(data,66,data.split('/')[7],type(data.split('/')[7]))
            data_key2=data.split("/")[7]
            data_dict[data_key2] =data
    #print(len(data_dict),data_dict)
    data_new=[]
    for x,y in data_dict.items():
        data_new.append(y)
    return data_new

def responsedouyin():
    data_url=distinct_data()
    # 使用request獲取視頻url的內容
    # stream=True作用是推遲下載響應體直到訪問Response.content屬性
    # 將視頻寫入文件夾
    num = 1
    for url in data_url:
        res = requests.get(url,stream=True,headers=headers)
        #res = requests.get(url=url, stream=True, headers=headers)
        #定義視頻存放的路徑
        pathinfo = 'H:/douyin-video/%d.mp4' % num  #%d 用于整數輸出   %s用于字符串輸出
        # 實現下載進度條顯示,這一步需要得到總視頻大小
        total_size = int(res.headers['Content-Length'])
        #print('這是視頻的總大小:',total_size)
        #設置流的起始值為0
        temp_size = 0
        if res.status_code == 200:
            with open(pathinfo, 'wb') as file:
                #file.write(res.content)
                #print(pathinfo + '下載完成啦啦啦啦啦')
                num += 1
                #當流下載時,下面是優先推薦的獲取內容方式,iter_content()函數就是得到文件的內容,指定chunk_size=1024,大小可以自己設置喲,設置的意思就是下載一點流寫一點流到磁盤中
                for chunk in res.iter_content(chunk_size=1024):
                    if chunk:
                        temp_size += len(chunk)
                        file.write(chunk)
                        file.flush() #刷新緩存
                #############下載進度條部分start###############
                        done = int(50 * temp_size / total_size)
                        #print('百分比:',done)
                        sys.stdout.write("\r[%s%s] %d % %" % ('█' * done, ' ' * (50 - done), 100 * temp_size / total_size)+" 下載信息:"+pathinfo + "下載完成啦啦啦啦啦")
                        sys.stdout.flush()#刷新緩存
                #############下載進度條部分end###############
                print('\n')#每一條打印在屏幕上換行輸出


if __name__ == '__main__':
    responsedouyin()

            
          

運行代碼,效果圖如下

使用python爬蟲,批量爬取抖音app視頻(requests+Fiddler+appium)_第5張圖片

視頻最終保存到文件夾中

使用python爬蟲,批量爬取抖音app視頻(requests+Fiddler+appium)_第6張圖片


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品视频网 | 国产精品免费观看 | 欧美一区在线观看视频 | 黄色av免费看 | 亚洲视频在线播放 | 免费黄色小视频 | www.男插女b免费视频 | 精一区二区| 亚洲欧美国产精品久久 | 在线视频观看国产 | a天堂资源在线观看 | 国产精品国产三级国产专区5o | 精品成人免费一区二区在线播放 | 精品午夜寂寞黄网站在线 | 精品免费福利视频 | 精品一本久久中文字幕 | 国产精品久久久久久久久久久久 | 一区二区中文字幕 | 片在线观看免费观看视频 | 高清国语自产拍免费视频国产 | 魔法骑士在线观看免费完整版 | 久久精品视频一区二区 | a久久| 国产精品高清m3u8在线播放 | 亚洲视频国产精品 | 久久免费精品视频在线观看 | 天天色天天操天天射 | 国产精品98福利小视频 | 久久久久国产一区二区三区 | 免费国产黄频在线观看视频 | 精品久久久久久久久久久久久久 | 色综合国产 | 成人免费视频观看视频 | 欧美福利 | 日韩欧美一区二区视频 | 日韩色区| 欧美日在线 | 日本理论片中文在线观看2828 | 日韩在线观看免费 | 国产欧美日韩精品一区 | 日本高清免费h色视频在线观看 |