为了账号安全,请及时绑定邮箱和手机立即绑定

随机网络抓取 Beautiful Soup

随机网络抓取 Beautiful Soup

墨色风雨 2023-02-07 10:43:15
我正在使用以下脚本从视频网站中提取 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')
查看完整描述

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


查看完整回答
反对 回复 2023-02-07
?
蝴蝶不菲

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 个随机视频,那么您将无能为力 :)


查看完整回答
反对 回复 2023-02-07
  • 2 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信