随机网络抓取 Beautiful Soup

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


墨色风雨
浏览 108回答 2
2回答

至尊宝的传说

我假设该网站每次请求都会为您提供 10 个以上的视频。我认为@MichaelMoretti 的建议是最简单的方法,但对包含 10 个元素的列表无效。所以也许解决方案是,首先,加载所有视频以删除“限制” videos = list(soup.find_all('script', type='application/ld+json')) ,然后使用sample()获取 10 个随机视频。编辑:这是代码:import requestsfrom bs4 import BeautifulSoupimport jsonimport randomdef 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')

蝴蝶不菲

看起来你已经列出了清单。现在你只需要随机化它。你应该能够利用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 个随机视频,那么您将无能为力 :)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python