Skip to main content
 首页 » 编程设计

python之按文件路径和 GET 参数(但不是它们的值)匹配 URL

2025年05月04日13lori

如何检查我的 URL 列表是否与给定的 url 匹配?仅当所有 GET 参数名称(不是它们的值)和路径都相同时,我才需要匹配 URL。例如,我有这个列表:

links = [ 
  "http://example.com/page.php?param1=111&param2=222", 
  "http://example.com/page2.php?param1=111&param2=222", 
  "http://example.com/page2.php?param1=111&param2=222&someParameterN=NumberN" 
  ] 
 
url = "http://example.com/page2.php?param1=NOT111&param2=NOT222" 

这个例子是 True 因为 url 匹配 links[1]。但是如何以最有效的方式进行匹配呢?我不知道 url 会是什么样子。

请您参考如下方法:

理想情况下,您希望使用 python 的 urlparse 库。 像这样解析您的网址:

import urlparse 
url = "http://example.com/page2.php?param1=NOT111&param2=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) 操作,也就是说,它尽可能快。