从两个不同的BeautifulSoup输出打印URL

问题描述 投票:0回答:2

我使用BeautifulSoup批量抽取几个URL。

这是我的脚本(只有相关的东西):

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种不同类型的打印,具体取决于URL的HTML(大约一半页面给出第一次打印,其余给出第二次打印)。

这是第一种印刷品:

<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?

P.S第一个印刷品也有一个我不需要的mp4链接。

python web-scraping beautifulsoup
2个回答
0
投票

您可以使用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
投票

确定您正在处理的版本并相应地拆分:


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

© www.soinside.com 2019 - 2024. All rights reserved.