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个赞
看起来你已经列出了清单。现在你只需要随机化它。你应该能够利用
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 个随机视频,那么您将无能为力 :)
添加回答
举报