2 回答

TA貢獻1789條經驗 獲得超10個贊
我假設該網站每次請求都會為您提供 10 個以上的視頻。我認為@MichaelMoretti 的建議是最簡單的方法,但對包含 10 個元素的列表無效。所以也許解決方案是,首先,加載所有視頻以刪除“限制” videos = list(soup.find_all('script', type='application/ld+json')) ,然后使用sample()獲取 10 個隨機視頻。
編輯:這是代碼:
import requests
from bs4 import BeautifulSoup
import json
import random
def link(url):
headers = {
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.content, 'html.parser')
videos = list(soup.find_all('script', type='application/ld+json'))
videos = random.sample(videos, 10)
for video in videos:
if '.mp4' in video.string:
try:
video = json.loads(video.string.strip())
r = requests.get(video['contentUrl'], stream=True)
filename = video['contentUrl'].split('/')[-1]
with open("/Users/path/Desktop/Test/" + filename, 'wb') as fd:
for chunk in r.iter_content(chunk_size=1024):
fd.write(chunk)
except Exception as e:
print(str(e))
link('http://www.shutterstock.com/video/search?sort=random')

TA貢獻1810條經驗 獲得超4個贊
看起來你已經列出了清單?,F在你只需要隨機化它。你應該能夠利用
import random
并隨機化您的列表,如下所示:
videos = list(soup.find_all('script', type='application/ld+json', limit=10))
random.shuffle(videos)
for video in videos:
只需將該導入與所有其他導入(如 BeautifulSoup)一起放在代碼頂部,就可以開始了!
如果您希望網站只返回 10 個隨機視頻,您需要更改請求這些視頻的方式。你如何讓你的瀏覽器返回 10 個隨機視頻?你會傳遞什么參數?然后模擬 URL 來做同樣的事情。如果該站點總是返回 10 個隨機視頻,那么您將無能為力 :)
添加回答
舉報