2010-03-23 5 views
4

BeautifulSoup을 사용하여 웹 페이지의 내용을 읽습니다. 내가 원하는 것은 <a href>http://으로 시작하는 것입니다. 나는 beautifulsoup에서 당신이 속성으로 검색 할 수 있음을 안다. 나는 단지 구문 문제가 있다고 생각한다. 나는 그것이 뭔가 갈 것이라고 상상할 것입니다.BeautifulSoup을 사용하여 웹 페이지에서 절대 링크를 가져 오려고 시도합니다.

page = urllib2.urlopen("http://www.linkpages.com") 
soup = BeautifulSoup(page) 
for link in soup.findAll('a'): 
    if link['href'].startswith('http://'): 
     print links 

하지만 그 반환

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
    File "C:\Python26\lib\BeautifulSoup.py", line 598, in __getitem__ 
    return self._getAttrMap()[key] 
KeyError: 'href' 

어떤 아이디어가? 미리 감사드립니다.

편집 특히이 사이트는 아닙니다. 스크립트는 사용자로부터 URL을 가져옵니다. 따라서 내부 링크 대상이 문제가 될 수 있습니다. 그 이유는 페이지에서 <'a'> 만 원하는 이유이기도합니다. 내가 www.reddit.com으로 켤 경우, 시작 링크 구문 분석과이에 가져옵니다

<a href="http://www.reddit.com/top/">top</a> 
<a href="http://www.reddit.com/saved/">saved</a> 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
    File "C:\Python26\lib\BeautifulSoup.py", line 598, in __getitem__ 
    return self._getAttrMap()[key] 
KeyError: 'href' 
+0

reddit.com의 내용은 입니다. 따라서 구문 오류가 아니라 API입니다. –

답변

6
from BeautifulSoup import BeautifulSoup 
import re 
import urllib2 

page = urllib2.urlopen("http://www.linkpages.com") 
soup = BeautifulSoup(page) 
for link in soup.findAll('a', attrs={'href': re.compile("^http://")}): 
    print link 
1

은 당신이 가능 href 속성없이 일부 <a> 태그가 있습니까? 내부 링크 대상입니까?

0

여기서 파싱 할 내용을 알려주십시오. Andrew가 지적했듯이, 관련 Hrefs가없는 앵커 태그가있는 것으로 보입니다.

당신이 정말로 그들을 무시하려는 경우 try 블록에 싸서 이후

except KeyError: pass

으로 잡아하지만 그건 자신의 문제가 있었다.

0
f=open('Links.txt','w') 
import urllib2 
from bs4 import BeautifulSoup 
url='http://www.redit.com' 
page=urllib2.urlopen(url) 
soup=BeautifulSoup(page) 
atags=soup.find_all('a') 
for item in atags: 
    for x in item.attrs: 
     if x=='href': 
      f.write(item.attrs[x]+',\n') 
     else: 
      continue 
f.close() 

덜 효율적인 솔루션입니다.

관련 문제