Python 在已爬网Javascript中获取相对URL的正则表达式
我有一个与Scrapy爬虫设置,并试图处理链接。问题是链接嵌入到Javascript中,我正在努力创建正则表达式。以下是我尝试处理的3个示例:Python 在已爬网Javascript中获取相对URL的正则表达式,python,regex,scrapy,Python,Regex,Scrapy,我有一个与Scrapy爬虫设置,并试图处理链接。问题是链接嵌入到Javascript中,我正在努力创建正则表达式。以下是我尝试处理的3个示例: javascript:openInIFrame('main','setup.phtml%3f.op%3d3800%26.who%3daaaaaaa%26.menuItemRefNo=118') javascript:window.open('overview.phtml?&.who=aaaaaa&.id=2','43425235','menubar=no
javascript:openInIFrame('main','setup.phtml%3f.op%3d3800%26.who%3daaaaaaa%26.menuItemRefNo=118')
javascript:window.open('overview.phtml?&.who=aaaaaa&.id=2','43425235','menubar=no,toolbar=no,location=no,resizeable=yes,maximize=yes')代码>
javascript:openInIFrame('main',“page.phtml%3f.op%3d1499%26.who%3daaaaaaa%26.ifmod%3dtest和.menuItemRefNo=7”)
setup.phtml%3f.op%3d3800%26.who%3daaaaaaa%26.menuItemRefNo=118
overview.phtml?&.who=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
page.phtml%3f.op%3d1499%26.who%3daaaaaaa%26.ifmod%3dtest&menuItemRefNo=7
我尝试了
(.*)和([“'))(?:(?=(\\?))\2.*?\1的变体,但似乎无法正确执行。我缺少什么?也许可以尝试以下操作:
['"].*phtml.*['"]
试试这个
import re
url_regex = re.compile(r"(?:javascript:openInIFrame\('main',|javascript:window.open\()\s*(?:'|\")([^'\"]+)(?:'|\")")
samples = [
"javascript:openInIFrame('main', 'setup.phtml%3f.op%3d3800%26.who%3dAAAAAAAAAAAA%26.menuItemRefNo=118')",
"javascript:window.open('overview.phtml?&.who=AAAAAAAAAAAA&.id=2', '43425235', 'menubar=no,toolbar=no,location=no,resizable=yes,maximize=yes');",
"javascript:openInIFrame('main', \"page.phtml%3f.op%3d1499%26.who%3dAAAAAAAAAAAA%26.ifmod%3dtest&.menuItemRefNo=7\")"
]
for sample in samples:
md = url_regex.search(sample)
if md:
print md.group(1)
else:
print 'NO MATCH'
对我来说,这将产生:
setup.phtml%3f.op%3d3800%26.who%3dAAAAAAAAAAAA%26.menuItemRefNo=118
overview.phtml?&.who=AAAAAAAAAAAA&.id=2
page.phtml%3f.op%3d1499%26.who%3dAAAAAAAAAAAA%26.ifmod%3dtest&.menuItemRefNo=7
诀窍是([^'\“]+)
。这将捕获一个或多个字符的任何序列,只要该字符不是双引号或单引号。因此,基本上,所有内容都是URL字符串的末尾,这正是URL。请注意,\“
是必需的,因为正则表达式本身是用”
分隔的。您将需要两个正则表达式–一个用于窗口。一个用于打开,另一个用于openInIFrame
。我可以根据其中是否有“.phtml”来获取引用的值吗?请告诉我=P如果您总是希望第一个单引号后跟phtml
,请确定'([^']+\.phtml[^']+)
,如果不需要处理反斜杠转义,那么URI将对其进行解码。