需要 python 的正则表达式帮助
Need help Regex for python
所以我想在这个 html 代码中得到 link 并且我已经尝试使用正则表达式
<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-Reviews
我怎样才能让它捕捉到 .html 部分?
我想让它捕捉整个link
此外,link 是动态生成的,因此没有任何固定长度
正则表达式方法的替代方法如何:使用 HTML 解析器 获取 onclick
属性值并使用 Javascript parser 提取最后一个函数参数。
我在这里使用 BeautifulSoup
and 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 解析器进行解析。
所以我想在这个 html 代码中得到 link 并且我已经尝试使用正则表达式
<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-Reviews
我怎样才能让它捕捉到 .html 部分?
我想让它捕捉整个link
此外,link 是动态生成的,因此没有任何固定长度
正则表达式方法的替代方法如何:使用 HTML 解析器 获取 onclick
属性值并使用 Javascript parser 提取最后一个函数参数。
我在这里使用 BeautifulSoup
and 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 解析器进行解析。