【问题标题】:Print URL from two different BeautifulSoap outputs从两个不同的 BeautifulSoap 输出打印 URL
【发布时间】:2019-03-28 14:57:10
【问题描述】:

我正在使用 BeautifulSoap 批量抓取一些 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

这会根据 URL 的 HTML 提供 2 种不同类型的打印(大约一半的页面为第一次打印,其余为第二次打印)。

这是第一种打印:

<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链接。

【问题讨论】:

  • 该问题仅包含绝对相关的代码部分。与问题无关的所有内容均已删除。
  • 如果您发布了真实的 URL,您的问题可能会受到更多关注。这样我们就可以验证代码并为您提供更好的替代 sn-ps。
  • 由于您是 SO 新手,我建议您阅读"How to ask"
  • 我想保持我的 URL 匿名,因为我有我的理由。这应该是相当明显的,因为我在发布问题之前显然已经替换了它们。

标签: python web-scraping beautifulsoup


【解决方案1】:

您可以使用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')

【讨论】:

    【解决方案2】:

    确定您要处理的版本并进行相应的拆分:

    
    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
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      相关资源
      最近更新 更多