Python 随机化抓网靓汤
我正在使用下面的脚本从视频网站中提取10个视频。每次运行时,它都会播放相同的10个视频。相反,我想让它每次拉10个不同的视频。我怎样才能做到这一点 我一直在尝试添加Python 随机化抓网靓汤,python,beautifulsoup,Python,Beautifulsoup,我正在使用下面的脚本从视频网站中提取10个视频。每次运行时,它都会播放相同的10个视频。相反,我想让它每次拉10个不同的视频。我怎样才能做到这一点 我一直在尝试添加videos=random.choice(video)和其他东西 def link(url): headers = { 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.
videos=random.choice(video)
和其他东西
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', limit=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:
print(Exception)
link('somewebsite.com')
看起来你的名单已经列出来了。现在你只需要随机化它。你应该能够利用
随机导入
并将您的列表随机化,如下所示:
videos = list(soup.find_all('script', type='application/ld+json', limit=10))
random.shuffle(videos)
for video in videos:
只需将该导入与所有其他导入(如BeautifulSoup)一起放在代码顶部,就可以开始了
如果你希望网站只返回10个随机视频,你需要改变你请求这些视频的方式。如何让浏览器返回10个随机视频?你会传递什么参数?然后模拟URL以执行相同的操作。如果网站总是随机返回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')
正如它所暗示的,也许你还没走那么远。尝试使用
random\u videos=random.sample(videos,10)
这似乎可行,但代码每次运行时仍会下载相同的10个视频。以本网站为例,每个页面都有多个视频。如果我去掉“限制”并将其应用于示例,那么“限制”将不再起作用,所有视频都将下载。我想知道我是否应该随机化页面而不是列表,也许这更简单?脚本中的视频位于运行时排序的固定列表中,因此无论您在查询字符串中输入了什么。我想到的唯一解决办法就是答案中的那个。我在我的电脑上试过了,它似乎起作用了。无论如何,我要编辑答案,插入我试过的代码。