【问题标题】:Python Beautifulsoup img tag parsingPython Beautifulsoup img 标签解析
【发布时间】:2012-05-22 22:13:31
【问题描述】:

我正在使用 beautifulsoup 来解析“www.youtube.com”中存在的所有 img 标签

代码是

import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen('http://www.youtube.com/')
soup = BeautifulSoup(page)
tags=soup.findAll('img')

但是我没有得到所有的img标签。得到的img标签也是无效的。

解析后得到的img标签与页面源img标签不同。缺少某些属性。

我需要获取 youtube.com 中的所有视频 img 标签

请帮忙

【问题讨论】:

    标签: python beautifulsoup image


    【解决方案1】:

    明确使用soup.findAll(name='img') 对我有用,我似乎没有从页面中遗漏任何内容。

    【讨论】:

    • soup.findAll(name='img') 返回相同的结果。我尝试在 html 页面中显示它,但它什么也没显示。
    • 如果你从urllib2.urlopen('http://www.youtube.com/')打印出结果,真的有什么要显示的吗?
    • 我打印了它,img 标签打印了一些无效的 src。并且所有 img 标签都没有被抓取。
    • 视频标签怎么样?\
    【解决方案2】:

    当我在这里尝试时似乎可以工作

    import urllib2
    from BeautifulSoup import BeautifulSoup
    page = urllib2.urlopen('http://www.youtube.com/')
    soup = BeautifulSoup(page)
    tags=soup.findAll('img')
    print "\n".join(set(tag['src'] for tag in tags))
    

    产生这个对我来说看起来不错

    http://i1.ytimg.com/vi/D9Zg67r9q9g/market_thumb.jpg?v=723c8e
    http://s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif
    //s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif
    /gen_204?a=fvhr&v=mha7pAOfqt4&nocache=1337083207.97
    http://i3.ytimg.com/vi/fNs8mf2OdkU/market_thumb.jpg?v=4f85544b
    http://i4.ytimg.com/vi/CkQFjyZCq4M/market_thumb.jpg?v=4f95762c
    http://i3.ytimg.com/vi/fzD5gAecqdM/market_thumb.jpg?v=b0cabf
    http://i3.ytimg.com/vi/2M3pb2_R2Ng/market_thumb.jpg?v=4f0d95fa
    //i2.ytimg.com/vi/mha7pAOfqt4/hqdefault.jpg
    

    【讨论】:

    • 我试过了,但是大部分src是一样的,而且大部分img标签都不见了。
    • 对我来说是的,它只显示第一个图像源,而不是全部:-(
    【解决方案3】:
    def grabimagetags():
    import urllib2
    from BeautifulSoup import BeautifulSoup
    page = urllib2.urlopen('http://www.youtube.com/')
    soup = BeautifulSoup(page)
    tags = soup.findAll('img')
    list.extend(set(tag['src'] for tag in tags))
    
    
    return list
    

    grabimagetags()

    我只会进行此更改,以便您可以传递 img 标签列表

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题。我找不到所有图像。因此,这里有一段代码可以为您提供图像标签的任何属性值。

      from BeautifulSoup import BeautifulSoup as BSHTML
      import urllib2
      page = urllib2.urlopen('http://www.youtube.com/')
      soup = BSHTML(page)
      images = soup.findAll('img')
      for image in images:
          #print image source
          print image['src']
          #print alternate text
          print image['alt']
      

      【讨论】:

        【解决方案5】:

        在我的例子中,一些图片不包含src

        所以我这样做是为了避免keyError 异常:

        art_imgs = set(img['src'] for img in article.find_all('img') if img.has_attr('src')) 
        

        【讨论】:

          【解决方案6】:

          试试这个。

          from simplified_scrapy import SimplifiedDoc, req
          url = 'https://www.youtube.com'
          html = req.get(url)
          doc = SimplifiedDoc(html)
          imgs = doc.listImg(url = url)
          print([img.url for img in imgs])
          
          imgs = doc.selects('img')
          for img in imgs:
            print (img)
            print (doc.absoluteUrl(url,img.src))
          

          【讨论】: