【问题标题】:Python regex url grabPython 正则表达式 url 抓取
【发布时间】:2013-08-21 19:01:27
【问题描述】:

我无法弄清楚如何使用正则表达式选择部分 html 链接

说链接是:

<a href="race?raceid=1234">Mushroom Cup</a>

我已经想出了如何获得比赛 ID,但我终其一生都无法弄清楚如何使用正则表达式来找到“蘑菇杯”。我能做的最好的就是得到 1234>蘑菇杯。

我是正则表达式的新手,这对我来说太难理解了。

【问题讨论】:

  • 输入的变化有多大?如果您要从大型文档的多个位置提取此数据,则可能值得使用 HTML 解析器而不是正则表达式。

标签: python html regex html-parsing wildcard


【解决方案1】:

很像

re.findall('<a href="race\?raceid=(\d+)">([^<]+)</a>',html_text)

【讨论】:

  • 我无法下载漂亮的汤(我有 anaconda python 包分发),所以谢谢你的正则表达式回答
  • 请不要使用正则表达式来解析 html :)
  • 如果这就是他所需要的一切,用正则表达式很容易得到......虽然总的来说我当然同意
  • @JoranBeasley 是的,我会给你 +1,因为你对我和 OP 很好:D
【解决方案2】:

永远不要使用正则表达式来解析 HTML。而是使用 HTML 解析器,例如 lxmlBeautifulSoup

这是一个使用BeautifulSoup的例子:

import urlparse
from bs4 import BeautifulSoup

soup = BeautifulSoup("""
<html>
<head>
    <title>Python regex url grab - Stack Overflow</title>
</head>
<body>
    <a href="race?raceid=1234">Mushroom Cup</a>
</body>
</html
""")

link = soup.find('a')
par = urlparse.parse_qs(urlparse.urlparse(link.attrs['href']).query)
print par['raceid'][0]   # prints 1234
print link.text   # prints Mushroom Cup

注意,urlparse 用于获取链接参数的值。在此处查看更多信息:Retrieving parameters from a URL

另见:

希望对您有所帮助。

【讨论】:

  • 哦...看起来更好
  • +1 因为我通常同意用正则表达式解析 html 是一个坏主意,但最好证明为什么这个解决方案可能优于 OP 问题的简单正则表达式。我知道不使用正则表达式有几个原因(主要是 html 是一种嵌套语言,而正则表达式不能很好地处理嵌套(无状态))
猜你喜欢
  • 2020-09-28
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
相关资源
最近更新 更多