随机抓取美丽汤

时间:2020-06-28 01:06:18

标签: python beautifulsoup

我正在使用以下脚本从视频网站中提取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)

2 个答案:

答案 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')