【问题标题】:python: get image link from htmlpython:从html获取图片链接
【发布时间】:2011-05-08 11:02:13
【问题描述】:

来自像这样的 html/rss sn-p

[...]<div class="..." style="..."></div><p><a href="..."
<img alt="" heightt="" src="http://link.to/image"
width="" /></a><span style="">[...]

我想获取图片 src 链接“http://link.to/image.jpg”。我怎样才能在python中做到这一点?谢谢。

【问题讨论】:

  • 是 HTML 还是 RSS?这是一个重要的区别。正确的答案是使用正确的解析器,我相信 Python 有这些。
  • 可以使用 RSS 我应该使用解析器,但如果是 html 怎么办?
  • 如果是 RSS,您应该使用 RSS 解析器(可能后面跟着一个 HTML 解析器,您可以提取 HTML)。对于 HTML,您应该使用 HTML 解析器。

标签: python xml regex


【解决方案1】:

lxml 是工作的工具。

从网页中抓取所有图像就这么简单:

import lxml.html

tree = lxml.html.parse("http://example.com")
images = tree.xpath("//img/@src")

print images

给予:

['/_img/iana-logo-pageheader.png', '/_img/icann-logo-micro.png']

如果它是一个 RSS 提要,您需要使用 lxml.etree 对其进行解析。

【讨论】:

    【解决方案2】:

    使用 urllib 和 beautifulsoup:

    import urllib
    from BeautifulSoup import BeautifulSoup
    
    f = urllib.urlopen(url)
    page = f.read()
    f.close()          
    soup = BeautifulSoup(page)
    for link in soup.findAll('img'):
        print "IMAGE LINKS:", link.get('data-src') 
    

    【讨论】:

      【解决方案3】:

      也许您应该从阅读 Regex Howto 教程和 StackOverflow 中的常见问题开始,其中说每当您处理 XML (HTML) 时不要使用正则表达式,而是使用好的解析器,在您的情况下,BeautifulSoup 就是其中之一.

      使用正则表达式,您可以这样做以获取指向您的图像的链接:

      import re
      pattern = re.compile(r'src="(http://.*\.jpg)"')
      pattern.search("yourhtmlcontainingtheimagelink").group(1)
      

      【讨论】:

      • 先发制人劝阻不要使用正则表达式,我喜欢 :)
      • 如果图像是 png 怎么办:我会使用 pattern = re.compile(r'src="(.*?)"')
      • 您将使用png 而不是jpg。如果您执行上述操作,它将提供所有 src 链接(.html 等),而不仅仅是图像。
      • @SandyBr - 这就是您不使用 Regex 解析 HTML 的原因。这是一个已解决的问题。懒惰并使用lxml(为此我在下面的答案中给出了简单的sn-p,它可以满足您的要求)或BeautifulSoup。 Read this 如果您想了解使用正则表达式解析 HTML 的恐怖之处。
      【解决方案4】:

      要添加到 svick 的答案, 尝试使用 BeautifuSoup 解析器,它过去对我有用。

      【讨论】:

        【解决方案5】:

        获取html标签数据,根据tornado spider

        from HTMLParser import HTMLParser
        
        def get_links(html):
            class URLSeeker(HTMLParser):
                def __init__(self):
                    HTMLParser.__init__(self)
                    self.urls = []
        
                def handle_starttag(self, tag, attrs):
                    if tag == 'img':
                        src = dict(attrs).get('src')
                        if src:
                            self.urls.append(src)
        
            url_seeker = URLSeeker()
            url_seeker.feed(html)
            return url_seeker.urls
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-07-10
          • 2011-03-05
          • 2012-07-06
          • 2010-10-25
          • 2022-07-20
          • 1970-01-01
          • 2011-08-10
          相关资源
          最近更新 更多