Python爬虫-视频爬取示例

爆米花视屏下载

代码

python
import requests
import re
import time
from selenium import webdriver
import threading
import os
import pyqt5


def getUrl():
    url = "https://www.baomihua.com/funny"

    payload = ""
    headers = {
        'cache-control': "no-cache",
        'Postman-Token': "d004742c-c7a1-48c4-b770-74d6dc7bab79"
    }

    response = requests.request("GET", url, data=payload, headers=headers)
    urs=re.findall(r"//video.*?\d\d\d\d\d\d\d\d",str(response.content))
    urls=[]
    for ur in urs:
        if "http:"+ur not in urls:
            urls.append("http:"+ur)
    return urls

def moreThreadDownload(urls):
    ts=[]
    for url,i in zip(urls,range(len(urls))):
        while i%5==0 and i!=0:
            n=0
            for m in range(5):
                n=m
                if ts[m].isAlive():
                    n-=1
                    break
            if n==4:
                ts=[]
                break
        t=threading.Thread(target=download,args=[url,i+1])
        t.start()
        ts.append(t)



def download(url,i):

    option = webdriver.ChromeOptions()
    option.add_argument("headless")
    browser = webdriver.Chrome(chrome_options=option)

    browser.get(url)
    browser.implicitly_wait(50)
    time.sleep(10)
    print("正在下载。。。。。{0}".format(str(i)))
    mp4_urls=re.findall(r"aliyun.*?mp4",browser.page_source)
    browser.quit()
    mp4=[]
    for mp4_url in mp4_urls:
        if "http://"+mp4_url not in mp4:
            mp4.append("http://"+mp4_url)
    try:

        file_path="baomihua"
        if os.path.exists(file_path) is not True:
            os.makedirs(file_path)
        file=open(file_path+"/"+str(i)+".mp4","wb")
        file.write(requests.get(mp4[0]).content)
        print("下载完成。。。。。{0}".format(str(i)))
    except:
        print("下载出错。。。。。{0}".format(str(i)))


if __name__=="__main__":
    urls=getUrl()
    moreThreadDownload(urls)

程序思路

分析网页

爆米花搞笑视频

下载爆米花搞笑类别的视屏,看见有一些视频被列出,然后想办法获得这些视屏跳转链接,获得这些跳转链接后,分别获取其中的视屏资源地址。

坑:

  • 视频资源url是js动态加载的,并不能直接获取
    • pip install selenium
    • 下载一个 浏览器引擎(chromedriver)
    • 将chromedriver放在与.py文件同一目录下(若编译,则需将其与编译后的.exe文件放在同一目录下)
  • 利用chromedriver访问网页依旧无视频url
    • 因为网页中的视屏播放是要放广告的只有广告放完才执行js,视屏url才会被加载,所以需要等待广告结束(大约十秒钟)
  • 爬取速度过慢
    • 因为用到浏览器引擎,需要对网页进行渲染,然后爬取渲染后的页面,所以所需要的时间自然较长,所以采用多线程下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值