Tüm utm_ * parametrelerini bir URL listesinden kaldırmaya çalışıyorum. Bulduğum en yakın şey şu: https://gist.github.com/626834.Python'daki URL'den utm_ * parametrelerini kaldırın
Herhangi bir fikrin var mı?
Tüm utm_ * parametrelerini bir URL listesinden kaldırmaya çalışıyorum. Bulduğum en yakın şey şu: https://gist.github.com/626834.Python'daki URL'den utm_ * parametrelerini kaldırın
Herhangi bir fikrin var mı?
import re
from urlparse import urlparse, urlunparse
url = 'http://www.someurl.com/page.html?foo=bar&utm_medium=qux&baz=qoo'
parsed_url = list(urlparse(url))
parsed_url[4] = '&'.join(
[x for x in parsed_url[4].split('&') if not re.match(r'utm_', x)])
utmless_url = urlunparse(parsed_url)
print utmless_url # 'http://www.someurl.com/page.html?foo=bar&baz=qoo'
Biraz uzun ama url * modüllerini kullanır ve tekrarlar.
from urllib import urlencode
from urlparse import urlparse, parse_qs, urlunparse
url = 'http://whatever.com/somepage?utm_one=3&something=4&utm_two=5&utm_blank&something_else'
parsed = urlparse(url)
qd = parse_qs(parsed.query, keep_blank_values=True)
filtered = dict((k, v) for k, v in qd.iteritems() if not k.startswith('utm_'))
newurl = urlunparse([
parsed.scheme,
parsed.netloc,
parsed.path,
parsed.params,
urlencode(filtered, doseq=True), # query string
parsed.fragment
])
print newurl
# 'http://whatever.com/somepage?something=4&something_else'
Bir sorun, bu, sorgu paramlarının sıralamasını değiştirecek ve hiçbir değeri olmayan paramorlara "=" ekleyecektir. Bu * bir sorun olmamalı, ama (ben böyle bir şey yazmaya çalışırken buldum) orada böyle şeylere güvenen siteler var. Örneğin, belirli bir sitede, http://www.example.com/?32423&foo=bar&a=b http://www.example.com/?a=b&foo=bar&32423= olarak yeniden yazılabilir. Evet, site Aptal ve yanlış ve sorgu param sıralamasına güvenmemeliydi. Ama eğer gerçek dünyadaki bir site ise (ve küçük degilse) o zaman onu görmezden gelemezsiniz :-( –
Basit ve eserleri, ve yayınladığınız linke dayalı AMA ... ben :)
düşünemiyorum nedense kırmayacak yüzden emin değilim yeniden varimport re
def trim_utm(url):
if "utm_" not in url:
return url
matches = re.findall('(.+\?)([^#]*)(.*)', url)
if len(matches) == 0:
return url
match = matches[0]
query = match[1]
sanitized_query = '&'.join([p for p in query.split('&') if not p.startswith('utm_')])
return match[0]+sanitized_query+match[2]
if __name__ == "__main__":
tests = [ "http://localhost/index.php?a=1&utm_source=1&b=2",
"http://localhost/index.php?a=1&utm_source=1&b=2#hash",
"http://localhost/index.php?a=1&utm_source=1&b=2&utm_something=no#hash",
"http://localhost/index.php?a=1&utm_source=1&utm_a=yes&b=2#hash",
"http://localhost/index.php?utm_a=a",
"http://localhost/index.php?a=utm_a",
"http://localhost/index.php?a=1&b=2",
"http://localhost/index.php",
"http://localhost/index.php#hash2"
]
for t in tests:
trimmed = trim_utm(t)
print t
print trimmed
print
Buna ne dersiniz? İyi ve basit:
url = 'https://searchengineland.com/amazon-q3-ad-revenues-surpass-1-billion-roughly-2x-early-2016-285763?utm_source=feedburner&utm_medium=feed&utm_campaign=feed-main'
print url[:url.find('?utm')]
https://searchengineland.com/amazon-q3-ad-revenues-surpass-1-billion-roughly-2x-early-2016-285763
Neden buradayız? Basit bir x.startswith ('utm _') 'bunu yapar ve daha iyi. – jadkik94
Yep, 're' ifadesi, Jon Clement'in cevabını görene kadar bilmediğim' startwith' ile değiştirilebilir. :) – mVChr