需要帮助Regex for python

时间:2015-11-01 00:23:10

标签: javascript python html regex html-parsing

所以我想获得这个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>

到目前为止,我已经完成了这项工作,但直到最后部分

才开始
  

/ Attraction_Review- \ W + - \ W + - \ W +

它只捕获

  

/ Attraction_Review-g1787072-d2242305-评价

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

我希望它能抓住整个链接

此外,链接是动态生成的,因此没有任何固定长度

1 个答案:

答案 0 :(得分:3)

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

我在这里使用BeautifulSoupslimit解析器:

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本身。