使用 Python/Django 从 html 获取第一张图片

Posted

技术标签:

【中文标题】使用 Python/Django 从 html 获取第一张图片【英文标题】:Getting first image from html using Python/Django 【发布时间】:2011-09-05 21:31:10 【问题描述】:

我正在从服务中抓取一堆 html 并稍微解析它。 我正在寻找一种从第一个图像标签中获取链接的方法。

类似这样的 JQuery 代码:

var imagelink = $('img:first', feed.content).attr('src');

但当然只使用 Python/Django(服务器在 Google 应用引擎上运行)。我宁愿不使用任何其他库,只是为了获取一个简单的链接。

【问题讨论】:

【参考方案1】:

这正是我正在寻找的。其实真正的代码是这样的:

tree = BeautifulSoup(raw_html)
img_link = tree.find_all('img')[0].get('src')

效果很好!谢谢 timmy-omahony

【讨论】:

【参考方案2】:

如果我对 html 进行更多解析,我可能会查看建议的库之一。但现在我已经通过以下方式解决了这个问题:

   startImgPos = post.find('<img', 0, len(post)) + 4
    if(startImgPos > -1):
        endImgPos = post.find('>', startImgPos, len(post))
        imageTag = post[startImgPos:endImgPos]
        startSrcPos = imageTag.find('src="', 0, len(post)) +5
        endSrcPos = imageTag.find('"', startSrcPos , len(post)) 
        linkTag = imageTag[startSrcPos:endSrcPos]
        r['linktag'] = linkTag

我稍后会改进它,但现在它可以解决问题。欢迎对上述代码提出更多想法/改进建议。

【讨论】:

不知道为什么我自己的答案排名下降。这正是我当时正在寻找的。无需使用库即可找到 img 的简单答案。【参考方案3】:

您可以使用 BeautifulSoup 来做到这一点:

http://www.crummy.com/software/BeautifulSoup/

这是一个 XML/HTML 解析器。所以你传入原始 html,然后你可以搜索特定的标签/属性等。

这样的东西应该可以工作:

tree = BeautifulSoup(raw_html)
img_link = (tree.find('img')[0]).attr['src']

【讨论】:

很高兴知道。由于它仅用于一个链接(src),因此我正在寻找一种没有库的方法。目前我的 python 技能在尝试搜索字符串时不是很好,但目前正在学习...... 即使文件中只有一个链接,也有很多 HTML 需要解析。您可以尝试使用正则表达式来查找 的第一个实例,但您可能会发现 BeautifulSoup 方法最简单 不完全是,你需要在 tree.find_all 上做 index 0 但是对于 tree.find 它会找到第一个,所以 index 0 会抛出一个错误

以上是关于使用 Python/Django 从 html 获取第一张图片的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量从 python Django 传递到 HTML 模板

从Python / Django生成symfony 2.4密码

Python3 Django -> HTML 到 PDF

Python Django:在数据库save()上从服务器向客户端发送消息

python django -7 Git与项目

python django -7 Git与项目