site.co.uk p> li>
site.com p> li>
site.me.uk p> li>
site.jpn.com p> li>
site.org.uk p> li>
site.it p> li>
ul>
Les noms de domaine peuvent également contenir des domaines 3ème et 4ème niveau. strong> p>
test.example.site.org.uk p> li>
test2.site.com p> li>
ul>
Des idées? :) p>
Site Code> Strong> P>
6 Réponses :
Problème dans le mélange d'extractions 1er et 2ème niveau. P>
solution triviale ... p>
Construire une liste de suffixes de site possibles, commandé de l'affaire étroite à la commune. "CO.UK", "Royaume-Uni", "CO.JP", "JP", "COM" P>
et chèque, peut suffire à être adapté à la fin du domaine. Si correspondance, la partie suivante est site. p>
Le seul moyen possible serait via une liste avec tous les domaines de niveau supérieur (ici comme .com ou co.uk) possible. Ensuite, vous rechercheriez cette liste et vérifiez. Je ne vois pas d'autre manière, du moins sans accéder à Internet au moment de l'exécution. P>
Vous avez besoin de la liste, même en accédant à Internet au moment de l'exécution. La décision de vendre des domaines de troisième niveau ou des domaines de deuxième niveau aux utilisateurs finaux est effectuée par l'autorité de la cctld. Je pense que certains ont même des domaines de deuxième niveau réservés et de vendre des domaines de troisième niveau sur les domaines et les domaines de deuxième niveau ailleurs. Bien sûr, vous devez également Maintenir la liste i> la liste, car ces choses changent (et c'est avant de rendre compte des nouvelles ccTlds créés)
Merci! Une idée où je pourrais saisir une liste? Se sent comme la mission impossible: s
aucun moyen de l'obtenir de manière fiable. Les sous-domaines sont arbitraires et il y a une liste de monstres d'extensions de domaine qui pousse tous les jours. Le meilleur cas est que vous vérifiez sur la liste des monstres des extensions de domaine et maintenez la liste. p>
liste: http://mxr.mozilla.org/mozilla -Central / Source / Netwerk / DNS / EFORTWERK_TLD_NAMES.DAT? RAW = 1 P>
Où est la liste des monstres? : |
mxr.mozilla.org/mozilla-central/ Source / Netwerk / DNS / ...
Je vous remercie! Si vous pouvez mettre cette liste dans votre réponse, je serai heureux de cocher ça! :)
C'est le visage public de la liste Mozilla: Publicsuffix.org . Voir aussi: Github.com/john-kurkowski/tldextract
Suivant @ Kohlehydrat's Suggestion:
import urllib2
class TldMatcher(object):
# use class vars for lazy loading
MASTERURL = "http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1"
TLDS = None
@classmethod
def loadTlds(cls, url=None):
url = url or cls.MASTERURL
# grab master list
lines = urllib2.urlopen(url).readlines()
# strip comments and blank lines
lines = [ln for ln in (ln.strip() for ln in lines) if len(ln) and ln[:2]!='//']
cls.TLDS = set(lines)
def __init__(self):
if TldMatcher.TLDS is None:
TldMatcher.loadTlds()
def getTld(self, url):
best_match = None
chunks = url.split('.')
for start in range(len(chunks)-1, -1, -1):
test = '.'.join(chunks[start:])
startest = '.'.join(['*']+chunks[start+1:])
if test in TldMatcher.TLDS or startest in TldMatcher.TLDS:
best_match = test
return best_match
def get2ld(self, url):
urls = url.split('.')
tlds = self.getTld(url).split('.')
return urls[-1 - len(tlds)]
def test_TldMatcher():
matcher = TldMatcher()
test_urls = [
'site.co.uk',
'site.com',
'site.me.uk',
'site.jpn.com',
'site.org.uk',
'site.it'
]
errors = 0
for u in test_urls:
res = matcher.get2ld(u)
if res != 'site':
print "Error: found '{0}', should be 'site'".format(res)
errors += 1
if errors==0:
print "Passed!"
return (errors==0)
@hugh Bothwell P>
Dans votre exemple, vous ne traitez pas de domaines spéciaux comme le Parlement.uk, ils représentent dans le dossier avec "!" (E.G.! Parlement.uk) P>
J'ai fait des changements de votre code, ce qui en fait aussi ressembler à ma fonction PHP que j'ai utilisée auparavant. P>
a également ajouté possibilité de charger les données du fichier local. p>
aussi testé avec certains domaines tels: p>
N'hésitez pas à me contacter @ github afin que je puisse vous ajouter comme co-auteur là-bas. P>
Github Repo est ici: P>
https://github.com/nmmmnu/tldextractor/blob/master/ Tldextractor.py p>
À peu près similaires à: Stackoverflow.com/questions/ 1066933 / ...