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

标签 python regex list url match

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

关于python - 按文件路径和 GET 参数(但不是它们的值)匹配 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39410308/

相关文章:

python - 使用scrapy从无限滚动页面中抓取数据

python - 重复正则表达式的一部分?

python - 将多个函数应用于数组的每一行

regex - 使用 AngularJS 和 Pattern/RegEx 验证 <input type ="number"/>

html - LCOV 从代码覆盖分析中排除整个包

list - 从mathematica列表中选择项目

java - 如何从文本文件中填充 Map<String, List<String>>? -难以动态命名每个列表

python - 如何使用pytorch同时迭代两个数据加载器?

javascript - 如何验证 HTML 表单中至少 3 个单词?

c# - 如何在C#中对List <T>进行排序