【问题标题】:Need help Regex for python需要帮助 Python 的正则表达式
【发布时间】:2016-02-01 04:17:59
【问题描述】:

所以我想在这个 html 代码中获取链接,我已经尝试使用正则表达式来实现它

<div class="title" onclick="ta.setEvtCookie('Search_Results_Page', 'POI_Name', '', 0, '/Attraction_Review-g1787072-d2242305-Reviews-Lake_Travis_Zipline_Adventures-Volente_Texas.html')"><span>Lake Travis <span class="highlighted">Zipline</span> Adventures</span></div>

到目前为止我已经这样做了,但是直到最后部分才赶上

/景点评论-\w+-\w+-\w+

它只会捕获

/Attraction_Review-g1787072-d2242305-评论

我怎样才能让它捕捉到 .html 部分?

我希望它捕获整个链接

另外,链接是动态生成的,所以没有固定长度

【问题讨论】:

标签: javascript python html regex html-parsing


【解决方案1】:

如何替代正则表达式方法:使用 HTML 解析器 获取 onclick 属性值并使用 Javascript 解析器 提取最后一个函数参数。

这里我使用BeautifulSoup 和slimit 解析器:

from bs4 import BeautifulSoup
from slimit import ast
from slimit.parser import Parser
from slimit.visitors import nodevisitor


data = """<div class="title" onclick="ta.setEvtCookie('Search_Results_Page', 'POI_Name', '', 0, '/Attraction_Review-g1787072-d2242305-Reviews-Lake_Travis_Zipline_Adventures-Volente_Texas.html')"><span>Lake Travis <span class="highlighted">Zipline</span> Adventures</span></div>"""

soup = BeautifulSoup(data)

# get onclick value
onclick = soup.find("div", class_="title", onclick=True)["onclick"]

# parse onclick js code
parser = Parser()
tree = parser.parse(onclick)
for node in nodevisitor.visit(tree):
    if isinstance(node, ast.FunctionCall):
        print(node.args[-1].value)

打印:

'/Attraction_Review-g1787072-d2242305-Reviews-Lake_Travis_Zipline_Adventures-Volente_Texas.html'

我知道对如此简单直接的 Javascript 代码使用 Javascript 解析器可能有点过分 - 请随意用正则表达式替换该部分。但是,请确保使用 HTML 解析器解析 HTML 本身。

【讨论】:

  • 谢谢 ^_^ 就像一个魅力!
  • 是的,它正在被 BeautifulSoup 解析。我认为使用正则表达式来获取链接会更容易。
  • 不会,因为 html 不能用正则表达式解析。检查顶部链接的问题以获取详细说明。使用像 alecxe 这样的 HTML 解析器不仅更容易,而且是让它正常工作的唯一方法。
猜你喜欢
  • 2021-08-29
  • 2021-09-01
  • 1970-01-01
  • 2012-11-30
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多