Mam łącze, takie jak http://www.techcrunch.com/ i chciałbym uzyskać tylko część strony linku techcrunch.com. Jak to zrobić w python?Uzyskaj domenę dominu z linkiem
Odpowiedz
Uzyskiwanie nazwy hosta jest wystarczająco łatwe przy użyciu urlparse:
hostname = urlparse.urlparse("http://www.techcrunch.com/").hostname
Pierwsze „domena root”, jednak będzie bardziej problematyczne, ponieważ nie jest zdefiniowane w sensie syntaktycznym. Jaka jest domena główna witryny "www.theregister.co.uk"? Co powiesz na sieci korzystające z domen domyślnych? "devbox12" może być prawidłową nazwą hosta.
Jednym ze sposobów radzenia sobie z tym byłoby użycie Public Suffix List, która próbuje skatalogować prawdziwe domeny najwyższego poziomu (np. ".com", ".net", ".org"), jak również prywatne domeny, które są używane jak TLD (np. ".co.uk" lub nawet ".github.io"). Możesz uzyskać dostęp do PSL od Python przy użyciu biblioteki publicsuffix2:
import publicsuffix
import urlparse
def get_base_domain(url):
# This causes an HTTP request; if your script is running more than,
# say, once a day, you'd want to cache it yourself. Make sure you
# update frequently, though!
psl = publicsuffix.fetch()
hostname = urlparse.urlparse(url).hostname
return publicsuffix.get_public_suffix(hostname, psl)
Proszę wyjaśnić, jak ten kod hostname = ".". join (len (nazwa hosta [-2]) <4 i nazwa hosta [-3:] lub nazwa hosta [-2:]) działa? Dzięki – Joozty
@Joozty - Negatywne indeksy zaczynają się od końca, więc 'nazwa hosta [-2]' oznacza wpis następny-do-ostatniego (w tym przypadku nazwa hosta podzielona przez kropki). 'foo i bar lub baz' działa podobnie do potrójnego: jeśli" foo "jest prawdziwe, zwróć" pasek "; w przeciwnym razie zwróć "baz". Wreszcie, nazwa hosta [-3:] "oznacza ostatnie trzy części. Wszystko razem oznacza to, że "jeśli następna część nazwy hosta jest krótsza niż cztery znaki, użyj ostatnich trzech części i połącz je razem z kropkami. W przeciwnym razie weź tylko dwie ostatnie części i połącz je razem". –
Z jakiegoś powodu, nawet po zainstalowaniu modułu, na Pythonie 3 otrzymuję 'ImportError: nie mogę zaimportować nazwy 'get_public_suffix''. Nie można znaleźć żadnej odpowiedzi w trybie online lub w dokumentacji, więc po prostu użyłem "tldextract" zamiast, który po prostu działa! Oczywiście musiałem najpierw "sudo pip3 install tldextract". – Nagev
Ten pracował dla moich celów. Pomyślałem, że się tym podzielę.
".".join("www.sun.google.com".split(".")[-2:])
Co z testowaniem "www.sun.google.co.uk"? Otrzymasz "co.uk" zamiast "google.co.uk" ... Pozdrawiam! –
Ya, użyj podejścia Bena Blanka. Nie jestem pewien, co myślałem (w 2010 r.) :-) –
______Using Python 3.3 i nie 2.x ________
Chciałbym dodać małą rzeczą, aby odpowiedzieć Ben Blanka.
from urllib.parse import quote,unquote,urlparse
u=unquote(u) #u= URL e.g. http://twitter.co.uk/hello/there
g=urlparse(u)
u=g.netloc
Teraz, właśnie nazwę domeny z urlparse.
Aby usunąć subdomeny, musisz przede wszystkim wiedzieć, które domeny najwyższego poziomu są domenami najwyższego poziomu, a które nie. Na przykład. w powyższym http://twitter.co.uk
- jest TLD, natomiast w http://sub.twitter.com
mamy tylko .com
jako TLD a sub
jest poddomeny.
Potrzebujemy zatem pliku/listy, który ma wszystkie tlds.
tlds = load_file("tlds.txt") #tlds holds the list of tlds
hostname = u.split(".")
if len(hostname)>2:
if hostname[-2].upper() in tlds:
hostname=".".join(hostname[-3:])
else:
hostname=".".join(hostname[-2:])
else:
hostname=".".join(hostname[-2:])
Ogólna struktura URL:
scheme://netloc/path;parameters?query#fragment
As TIMTOWTDI motto:
Korzystanie urlparse,
>>> from urllib.parse import urlparse # python 3.x
>>> parsed_uri = urlparse('http://www.stackoverflow.com/questions/41899120/whatever') # returns six components
>>> domain = '{uri.netloc}/'.format(uri=parsed_uri)
>>> result = domain.replace('www.', '') # as per your case
>>> print(result)
'stackoverflow.com/'
Korzystanie tldextract,
>>> import tldextract # The module looks up TLDs in the Public Suffix List, mantained by Mozilla volunteers
>>> tldextract.extract('http://forums.news.cnn.com/')
ExtractResult(subdomain='forums.news', domain='cnn', suffix='com')
w przypadku:
>>> extracted = tldextract.extract('http://www.techcrunch.com/')
>>> '{}.{}'.format(extracted.domain, extracted.suffix)
'techcrunch.com'
tldextract
on the other hand knows what all gTLDs [Generic Top-Level Domains] and ccTLDs [Country Code Top-Level Domains] look like by looking up the currently living ones according to the Public Suffix List. So, given a URL, it knows its subdomain from its domain, and its domain from its country code.
Cheerio!:)
Poniższy scenariusz nie jest idealny, ale może być używany do wyświetlania/skracania. Jeśli naprawdę chcesz/musisz unikać jakichkolwiek zależności od innych firm - zwłaszcza zdalnie pobierasz i buforujesz niektóre dane, mogę zasugerować ci wykonanie skryptu, którego używam w moich projektach. Wykorzystuje ostatnie dwie części domeny do najpopularniejszych rozszerzeń domen i pozostawia ostatnie trzy części dla reszty mniej znanych rozszerzeń domen. W najgorszym przypadku domeny scenariusz będzie miał trzy części zamiast dwóch:
from urlparse import urlparse
def extract_domain(url):
parsed_domain = urlparse(url)
domain = parsed_domain.netloc or parsed_domain.path # Just in case, for urls without scheme
domain_parts = domain.split('.')
if len(domain_parts) > 2:
return '.'.join(domain_parts[-(2 if domain_parts[-1] in {
'com', 'net', 'org', 'io', 'ly', 'me', 'sh', 'fm', 'us'} else 3):])
return domain
extract_domain('google.com') # google.com
extract_domain('www.google.com') # google.com
extract_domain('sub.sub2.google.com') # google.com
extract_domain('google.co.uk') # google.co.uk
extract_domain('sub.google.co.uk') # google.co.uk
extract_domain('www.google.com') # google.com
extract_domain('sub.sub2.voila.fr') # sub2.voila.fr
def get_domain(url):
u = urlsplit(url)
return u.netloc
def get_top_domain(url):
u"""
>>> get_top_domain('http://www.google.com')
'google.com'
>>> get_top_domain('http://www.sina.com.cn')
'sina.com.cn'
>>> get_top_domain('http://bbc.co.uk')
'bbc.co.uk'
>>> get_top_domain('http://mail.cs.buaa.edu.cn')
'buaa.edu.cn'
"""
domain = get_domain(url)
domain_parts = domain.split('.')
if len(domain_parts) < 2:
return domain
top_domain_parts = 2
# if a domain's last part is 2 letter long, it must be country name
if len(domain_parts[-1]) == 2:
if domain_parts[-1] in ['uk', 'jp']:
if domain_parts[-2] in ['co', 'ac', 'me', 'gov', 'org', 'net']:
top_domain_parts = 3
else:
if domain_parts[-2] in ['com', 'org', 'net', 'edu', 'gov']:
top_domain_parts = 3
return '.'.join(domain_parts[-top_domain_parts:])
- 1. Uzyskaj domenę hosta z adresu URL?
- 2. Testowanie React Router z linkiem
- 3. Pobierz domenę root z location.host
- 4. Paypal - strona z linkiem zwrotnym i zmienne
- 5. dzwonisz do galerii fancybox z innym linkiem
- 6. jQuery scrollTop nie działa z linkiem kwerendy
- 7. Błąd wysyłania wiadomości z linkiem do Facebooka
- 8. Jak postępować zgodnie z linkiem w QWebKit?
- 9. Jak utworzyć formularz z linkiem LinkButton?
- 10. Użyj fragmentu Wordpress z linkiem "więcej"? Dokumentacja
- 11. pakiet nodejs npm | Problem z linkiem npm
- 12. Przekierowanie IP na domenę
- 13. Szyny bez podążania za linkiem
- 14. Połącz niestandardową domenę z dowolnym repozytorium GitHub
- 15. Jak uzyskać domenę z wiadomości e-mail?
- 16. Utwórz domenę w MySQL
- 17. Jak uczynić cały td linkiem?
- 18. Zdobądź domenę dla pinterest api
- 19. Jak uzyskać domenę bieżącego żądania?
- 20. weryfikując domenę przy użyciu php
- 21. Odstęp między linkiem a ikoną, fontawesome
- 22. aplikacja Otwarcie w Google Play z linkiem przekierowania
- 23. android: html w widoku tekstowym z linkiem klikalnym
- 24. Nie można uzyskać identyfikatora zgodnego z linkiem w pasku nawigacyjnym
- 25. Jak dodać potwierdzenie z linkiem do Ruby na szynach
- 26. Jak postępować zgodnie z linkiem do użytkownika w kodzie Cloud?
- 27. Dodaj wydarzenie kalendarza Outlook z linkiem na stronie internetowej
- 28. Problem z linkiem JNA podczas uruchamiania Kasandra RHEL 6.5
- 29. Jak utworzyć przekrój obrazu klikalnym linkiem
- 30. Różnica między skokiem i skokiem i linkiem
Może to rade. http://docs.python.org/library/urlparse.html – Eli