亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

隨機網絡抓取 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個贊

看起來你已經列出了清單?,F在你只需要隨機化它。你應該能夠利用


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 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號