Распечатать URL из двух разных выходов BeautifulSoap - PullRequest
0 голосов
/ 28 марта 2019

Я собираю несколько URL-адресов в пакетном режиме с помощью BeautifulSoap.

Вот мой скрипт (только соответствующие материалы):

import urllib2
from bs4 import BeautifulSoup
quote_page = 'https://example.com/foo/bar'
page = urllib2.urlopen(quote_page)
soup = BeautifulSoup(page, 'html.parser')
url_box = soup.find('div', attrs={'class': 'player'})
print url_box

Это дает 2 различных вида печати в зависимости от HTMLURL (около половины страниц дает первый отпечаток, а остальные - второй).

Вот первый вид печати:

<div class="player">
<video class="video-js vjs-fluid video-player" height="100%" id="some-player" poster="https://example.com/path/to/jpg/random.jpg" width="100%"></video>
<span data-type="trailer-src" data-url="https://example.com/path/to/mp4/random.mp4"></span>
</div>

А вот другой:

<div class="player">
<img alt="Image description here" src="https://example.com/path/to/jpg/random.jpg"/>
</div>

Я хочу извлечь URL изображения, который вначале равен poster и вторым src.

Любые идеи, как сделать такой же сценарий, извлекает этот URL из любого вида печати?

PS На первом отпечатке также есть ссылка на mp4, которая мне не нужна.

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Вы можете использовать метод get(), чтобы получить значение attrs из целевого тега.

Вы должны иметь возможность сделать что-то вроде этого:

if url_box.find('video'):
    url = url_box.find('video').get('poster')
    mp4 = ulr_box.find('span').get('data-url')
if url_box.find('img'):
    url = url_box.find('img').get('src')
0 голосов
/ 28 марта 2019

Решите, с какой версией вы имеете дело, и разделите соответственно:


firstVersion = '''<div class="player">
<video class="video-js vjs-fluid video-player" height="100%" id="some-player" poster="https://example.com/path/to/jpg/random.jpg" width="100%"></video>
<span data-type="trailer-src" data-url="https://example.com/path/to/mp4/random.mp4"></span>
</div>'''

secondVersion = '''<div class="player">
<img alt="Image description here" src="https://example.com/path/to/jpg/random.jpg"/>
</div>'''

def extractImageUrl(htmlInput):
    imageUrl = ""
    if "poster" in htmlInput:
        imageUrl = htmlInput.split('poster="')[1].split('"')[0]
    elif "src" in htmlInput:
        imageUrl = htmlInput.split('src="')[1].split('"')[0]
    return imageUrl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...