我想找到一个能够很好地模拟匹配网址的工具,这些网址需要额外的参数。例如,对于我的用例,这两个URL是相同的:
atest = (http://www.npr.org/templates/story/story.php?storyId=4231170', 'http://www.npr.org/templates/story/story.php?storyId=4231170&sc=fb&cc=fp)
乍一看,fuzz.partial_ratio
和fuzz.token_set_ratio
fuzzywuzzy以100门槛完成工作:
ratio = fuzz.ratio(atest[0], atest[1])
partialratio = fuzz.partial_ratio(atest[0], atest[1])
sortratio = fuzz.token_sort_ratio(atest[0], atest[1])
setratio = fuzz.token_set_ratio(atest[0], atest[1])
print('ratio: %s' % (ratio))
print('partialratio: %s' % (partialratio))
print('sortratio: %s' % (sortratio))
print('setratio: %s' % (setratio))
>>>ratio: 83
>>>partialratio: 100
>>>sortratio: 83
>>>setratio: 100
但是这种方法失败并在其他情况下返回100,例如:
atest('yahoo.com','http://finance.yahoo.com/news/earnings-preview-monsanto-report-2q-174000816.html')
我的数据中的网址和添加的参数差异很大。我有兴趣知道是否有人使用url解析或类似方法有更好的方法吗?
答案 0 :(得分:0)
如果您只想检查第一个URL中的所有查询参数是否存在于第二个URL中,您可以通过设置差异以更简单的方式执行此操作:
import urllib.parse as urlparse
base_url = 'http://www.npr.org/templates/story/story.php?storyId=4231170'
check_url = 'http://www.npr.org/templates/story/story.php?storyId=4231170&sc=fb&cc=fp'
base_url_parameters = set(urlparse.parse_qs(urlparse.urlparse(base_url).query).keys())
check_url_parameters = set(urlparse.parse_qs(urlparse.urlparse(check_url).query).keys())
print(base_url_parameters - check_url_parameters)
这将返回一个空集,但如果您将基本网址更改为
base_url = 'http://www.npr.org/templates/story/story.php?storyId=4231170&test=1'
它将返回{'test'}
,这意味着第二个网址中缺少基本网址中的额外参数。