如何检查我的 URL 列表是否与给定的 url
匹配?仅当所有 GET 参数名称(不是它们的值)和路径都相同时,我才需要匹配 URL。例如,我有这个列表:
links = [
"http://example.com/page.php?param1=111¶m2=222",
"http://example.com/page2.php?param1=111¶m2=222",
"http://example.com/page2.php?param1=111¶m2=222&someParameterN=NumberN"
]
url = "http://example.com/page2.php?param1=NOT111¶m2=NOT222"
这个例子是 True
因为 url
匹配 links[1]
。但是如何以最有效的方式进行匹配呢?我不知道 url
会是什么样子。
最佳答案
理想情况下,您希望使用 python 的 urlparse 库。 像这样解析您的网址:
import urlparse
url = "http://example.com/page2.php?param1=NOT111¶m2=NOT222"
parsed_url = urlparse.urlparse(url)
urlparse.parse_qs(parsed_url.query).keys()
然后你创建一个看起来像这样的数据结构:
seen_pages = set() # Stores all pages you've already seen.
然后你的所有页面都像这样:
for page in list_of_pages:
parsed_url = urlparse.urlparse(page)
current_page = (parsed_url.path, frozenset(urlparse.parse_qs(parsed_url.query).keys())
seen_pages.add(current_page)
这会将您的所有页面以以下形式存储:tuple(link, set(param1,param2))
在一个集合中。
要查看您是否已经使用这些确切的参数访问过该页面,只需再次创建 current_page
结构并在集合中查找它。
查找和添加到一个集合是一个 O(1)
操作,也就是说,它尽可能快。
关于python - 按文件路径和 GET 参数(但不是它们的值)匹配 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39410308/