如何检查我的 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) 操作,也就是说,它尽可能快。
