2013-08-12 2 views
0

나는 주어진 사이트로부터 모든 링크를 얻는 파이썬 웹 스크래핑 프로그램을 가지고 있으며, 그 후에 각 링크와 패스의 도메인 이름을 프린트 할 수있다.파이썬 웹 스크래핑 - 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의 일부를 인쇄 할 수 있습니다 나도 몰라하지만 난이었다 성공하지 못했습니다.

어떤 도움을 환영합니다.

답변

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]이 트릭을해야합니다.