我正在使用以下脚本从视频网站中提取10个视频。每次运行它都会拉相同的10个视频。相反,我希望它每次都能拉10个不同的视频。我该如何实现?
我一直在尝试添加def dailyTemperatures(self, T):
if len(T) == 0:
return []
if len(T) == 1:
return [0]
R = [None] * len(T)
#create map, populate map
M = {}
for i in range(0, len(T)):
M[i] = T[i]
#sort map by value(temps)
MS = sorted(M.items(), key=lambda x: x[1])
for i in MS:
print(i[0], i[1])
for i in range(0,len(T)):
t = T[i] #base value for comparison
R[i] = 0
x = 0
# find smallest x for which temp T[x] > T[i]
# Dictionary is sorted for Temps
R[i] = x - i
return R
等。
videos = random.choice(video)
答案 0 :(得分:1)
看起来您已经列出了清单。现在,您只需要将其随机化即可。您应该能够利用
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个随机视频,那么您将无能为力:)
答案 1 :(得分:1)
我假设该网站为每个请求提供了超过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')