2014-10-22 2 views
0

Попытка извлечь доменное имя из URL. Например:Доменное имя regex

x <-"https://stackoverflow.com/questions/ask" 

к: stackoverflow.com

я нашел следующее регулярное выражение из этого вопроса. regex match main domain name.

regex <- "([0-9A-Za-z]{2,}\\[0-9A-Za-z]{2,3}\\[0-9A-Za-z]{2,3}|[0-9A-Za-z]{2,}\\[0-9A-Za-z]{2,3})$" 

Но R, кажется, не понимают, когда я пытаюсь использовать str_extract из stringr пакета.

x2 <- str_extract(x, regex) 
+1

Вы должны быть очень конкретны в отношении того, что считаете «доменным именем». См. Комментарии под моим ответом. –

ответ

3

Почему бы не использовать parseURI от XML? Он разбивает URL на его различные элементы.

x <- "http://stackoverflow.com/questions/ask" 
library(XML) 
parseURI(x)$server 
# [1] "stackoverflow.com" 
+1

сервер не возвращает корневой домен. Ответ на мой вопрос здесь: http://stackoverflow.com/questions/26291025/return-root-domain-from-url-in-r, как в '> parseURI (" http: //www.stackoverflow. com/questions/ask ") $ server' дает' [1] "www.stackoverflow.com" '. Обычно "www." при возврате корневого домена. – Alex

+1

Да, но это не пример, показанный в вопросе. На данный момент мы не знаем, захочет ли OP сохранить 'www' или удалить его. –

+0

stackoverflow.com без wwww. будет идеальным результатом анализа URL-адреса. – lmcshane

1

Добыча TLD не так проста, как вы думаете. Существует nice list того, что считается «общедоступными TLD», то есть тем, что является истинным доменом верхнего уровня. Я работаю с ними каждый день (горнодобывающие домены для кибербезопасности).

У нас есть tldextractR package (больше информации here), который отлично справляется с этим для дальнейшего интеллектуального анализа данных. Вы можете использовать parse_url из httr извлечь hostname компонент, а затем запустить нашу tldextract функцию над ним:

library(httr) 
library(rvest) 
library(tldextract) 

# get some URLs - I encourage you to bump up "10" to "100" or more to see how 
# tldextract deals with "public TLDs" 
pg <- html("http://httparchive.org/urls.php?start=1&end=10") 

# clean up the <pre> output and make it a character list 
urls <- pg %>% html_nodes("pre") %>% html_text() %>% strsplit("\n") %>% unlist 
urls <- urls[urls != ""] # that site has a blank first line we don't need 

# extract the hostname part 
urls <- as.character(unlist(sapply(lapply(urls, parse_url), "[", "hostname"))) 
urls 

## [1] "www.google.com" "www.facebook.com" "www.youtube.com" 
## [4] "www.yahoo.com"  "www.baidu.com"  "www.wikipedia.org" 
## [7] "www.amazon.com" "www.twitter.com" "www.qq.com"  
## [10] "www.taobao.com" 

# extract the TLDs 
tlds <- tldextract(urls) 
tlds 

##     host subdomain domain tld 
## 1  www.google.com  www google com 
## 2 www.facebook.com  www facebook com 
## 3 www.youtube.com  www youtube com 
## 4  www.yahoo.com  www  yahoo com 
## 5  www.baidu.com  www  baidu com 
## 6 www.wikipedia.org  www wikipedia org 
## 7  www.amazon.com  www amazon com 
## 8 www.twitter.com  www twitter com 
## 9   www.qq.com  www  qq com 
## 10 www.taobao.com  www taobao com 

# piece what we need together 
sprintf("%s.%s", tlds$domain, tlds$tld) 

## [1] "google.com" "facebook.com" "youtube.com" "yahoo.com"  
## [5] "baidu.com"  "wikipedia.org" "amazon.com" "twitter.com" 
## [9] "qq.com"  "taobao.com" 
Смежные вопросы