【问题标题】:python url extract from html从html中提取python url
【发布时间】:2012-12-16 17:44:20
【问题描述】:

我需要 python 正则表达式从 html 中提取 url, 示例 html 代码:

<a href=""http://a0c5e.site.it/r"" target=_blank><font color=#808080>MailUp</font></a>
<a href=""http://www.site.it/prodottiLLPP.php?id=1"" class=""txtBlueGeorgia16"">Prodotti</a>
<a href=""http://www.site.it/terremoto.php"" target=""blank"" class=""txtGrigioScuroGeorgia12"">Terremoto</a>
<a class='mini' href='http://www.site.com/remove/professionisti.aspx?Id=65&Code=xhmyskwzse'>clicca qui.</a>`

我只需要提取:

 http://a0c5e.site.it/r
 http://www.site.it/prodottiLLPP.php?id=1
 http://www.site.it/terremoto.php
 http://www.site.com/remove/professionisti.aspx?Id=65&Code=xhmyskwzse

【问题讨论】:

  • 欢迎来到 Stack Overflow!看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(控制台输出、堆栈跟踪、编译器错误 - 不管是什么适用的)。您提供的详细信息越多,您可能收到的答案就越多。
  • 你的意思是href字段中的双引号。
  • 1.请参阅@MartijnPieters 的回答。 2.Don't use a regex解析html!

标签: python regex url extract


【解决方案1】:

Regex 可能会解决您的问题,但请考虑使用 BeautifulSoup

>>> html = """<a href="http://a0c5e.site.it/r" target=_blank><font color=#808080>MailUp</font></a>
<a href="http://www.site.it/prodottiLLPP.php?id=1" class=""txtBlueGeorgia16"">Prodotti</a>
<a href="http://www.site.it/terremoto.php" target=""blank"" class=""txtGrigioScuroGeorgia12"">Terremoto</a>
<a class='mini' href='http://www.site.com/remove/professionisti.aspx?Id=65&Code=xhmyskwzse'>clicca qui.</a>`"""
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup(html)
>>> [e['href'] for e in soup.findAll('a')]
[u'http://a0c5e.site.it/r', u'http://www.site.it/prodottiLLPP.php?id=1', u'http://www.site.it/terremoto.php', u'http://www.site.com/remove/professionisti.aspx?Id=65&Code=xhmyskwzse']

来自乔恩·克莱门茨

soup.findAll('a', {'href': True}) 

另一方面,您的 html sn-p 中的 href 引用不正确。

【讨论】:

  • 很好的答案,但它有点像勺子喂食。现在他将能够复制和粘贴代码,并且会提出另一个问题而不是阅读文档:)
  • @ErenT.:我不确定他是否知道 BeautifulSoup。更多的是让他相信 bs 的力量并超越正则表达式。
  • soup.findAll('a', {'href': True}) 更健壮一点:)
  • 我认为部分原因是他想处理引用错误的东西。有时您无法控制人们是否会向您提供不良数据。
【解决方案2】:

观察

Python 2.7.3 (default, Sep  4 2012, 20:19:03) 
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
>>> junk=''' <a href=""http://a0c5e.site.it/r"" target=_blank><font color=#808080>MailUp</font></a>
... <a href=""http://www.site.it/prodottiLLPP.php?id=1"" class=""txtBlueGeorgia16"">Prodotti</a>
... <a href=""http://www.site.it/terremoto.php"" target=""blank"" class=""txtGrigioScuroGeorgia12"">Terremoto</a>
... <a class='mini' href='http://www.site.com/remove/professionisti.aspx?Id=65&Code=xhmyskwzse'>clicca qui.</a>`'''
>>> import re
>>> pat=re.compile(r'''http[\:/a-zA-Z0-9\.\?\=&]*''')
>>> pat.findall(junk)
['http://a0c5e.site.it/r', 'http://www.site.it/prodottiLLPP.php?id=1', 'http://www.site.it/terremoto.php', 'http://www.site.com/remove/professionisti.aspx?Id=65&Code=xhmyskwzse']

可能需要添加 % 以便您可以捕获其他逃逸。

【讨论】:

  • 鼓掌 感谢 Ishpeck 大师向我们展示了简单正则表达式的古老武术。 (^u^)
【解决方案3】:

您可以使用BeautifulSoup library 来操作/提取 HTML 上的信息。

我不建议您使用正则表达式来解析 HTML 数据。 HTML 不是规则的,它是上下文无关的语法。当链接结构发生变化时,HTML 可能有效,但您的正则表达式可能无效,您将不得不重新编写表达式。使用 BeautifulSoup 是提取信息的好方法。

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 2011-07-09
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2013-03-09
    相关资源
    最近更新 更多