2013-08-12 2 views
0

У меня есть программа очистки веб-страниц Python, которая получает все ссылки с определенных сайтов, и мне удалось распечатать имя домена каждой ссылки и пути после этого.Python web scraping - напечатать только часть url

Код:

import urllib 
import re 
import mechanize 
from bs4 import BeautifulSoup 
import urlparse 
import cookielib 

url = "http://www.sparkbrowser.com" 

br = mechanize.Browser() 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 
br.set_handle_robots(False) 
br.set_handle_equiv(False) 
br.set_handle_redirect(True) 
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
page = br.open(url, timeout=5) 

htmlcontent = page.read() 
soup = BeautifulSoup(htmlcontent) 


for link in br.links(text_regex=re.compile('^((?!IMG).)*$')): 
    newurl = urlparse.urljoin(link.base_url, link.url) 
    base = link.base_url 
    print base," - ",newurl 

и получает меня результаты, как это:

http://www.sparkbrowser.com - http://www.sparkbrowser.com 
http://www.sparkbrowser.com - http://sparkbrowser.com 
http://www.sparkbrowser.com - http://www.sparkbrowser.com/index.php 
http://www.sparkbrowser.com - http://www.sparkbrowser.com/download.php 
http://www.sparkbrowser.com - http://www.sparkbrowser.com/about.php 
http://www.sparkbrowser.com - http://www.sparkbrowser.com/features.php 
http://www.sparkbrowser.com - http://www.sparkbrowser.com/spark.php 

etc.... 

мне было интересно, как получить только sparkbrowser.com или sparkbrowser только по данному адресу?

Я знаю, как отделить имя домена, http://www.sparkbrowser.com и путь, но я не знаю, если это возможно напечатать части URL, как я уже упоминал

Я пытался что-то с Regex, но я был не успешный.

Любая помощь приветствуется.

ответ

0

Используйте urlparse.urlsplit() function разделить вне URL на составные части:

>>> from urlparse import urlsplit 
>>> urlsplit('http://www.sparkbrowser.com/index.php') 
SplitResult(scheme='http', netloc='www.sparkbrowser.com', path='/index.php', query='', fragment='') 
>>> _.netloc 
'www.sparkbrowser.com' 

Вы можете затем разделить значение .netloc дополнительно при желании:

>>> '.'.join(res.netloc.split('.')[-2:]) 
'sparkbrowser.com' 

или (лучше), использовать publicsuffix library для извлечения публичного суффикса для данного доменного имени:

>>> from publicsuffix import PublicSuffixList 
>>> psl = PublicSuffixList() 
>>> psl.get_public_suffix(res.netloc) 
'sparkbrowser.com' 
>>> psl.get_public_suffix('www.example.domain.co.uk') 
'domain.co.uk' 
+0

это будет использовать меня ... Большое вам спасибо! – dzordz

0

newurl.split ('. Com') [1] должен сделать трюк.