2013-07-10 3 views
1

python 스크립트를 실행하여 html 파일을 구문 분석하고 target="_blank" 속성을 사용하여 모든 링크 목록을 수집합니다.BeautifulSoup을 사용하여 로컬 파일에서 데이터를 수집하려고 시도했습니다

다음을 시도했지만 bs4에서 아무것도 얻지 못했습니다. SoupStrainer는 문서에서 findAll 등과 같은 방식으로 인수를 취할 것이라고 말합니다. 나는 어리석은 실수를 놓치고 있습니까?

import os 
import sys 

from bs4 import BeautifulSoup, SoupStrainer 
from unipath import Path 

def main(): 

    ROOT = Path(os.path.realpath(__file__)).ancestor(3) 
    src = ROOT.child("src") 
    templatedir = src.child("templates") 

    for (dirpath, dirs, files) in os.walk(templatedir): 
     for path in (Path(dirpath, f) for f in files): 
      if path.endswith(".html"): 
       for link in BeautifulSoup(path, parse_only=SoupStrainer(target="_blank")): 
        print link 

if __name__ == "__main__": 
    sys.exit(main()) 

답변

2

난 당신이 내가 그것을 간단 할 줄 알았

if path.endswith(".html"): 
    htmlfile = open(dirpath) 
    for link in BeautifulSoup(htmlfile,parse_only=SoupStrainer(target="_blank")): 
     print link 
+0

나는 그것이 간과 한 단순한 무언가 일 것임을 알았다! 감사. –

2

사용법 BeautifulSoup은 OK입니다하지만 당신은, html로 문자열에서 HTML 파일의 단지 경로를 통과해야한다. BeautifulSoup은 html 문자열을 파일 경로가 아닌 인수로 사용합니다. 열지 않고 내용을 자동으로 읽지 않습니다. 너 혼자해야 해. a.html을 전달하면 수프는 <html><body><p>a.html</p></body></html>이됩니다. 이것은 파일의 내용이 아닙니다. 확실히 링크가 없습니다. BeautifulSoup(open(path).read(), ...)을 사용해야합니다.

편집 :
또한 파일 기술자를 사용할 수 있습니다. BeautifulSoup(open(path), ...)이면 충분합니다.

+0

이런 걸 필요가 있다고 생각합니다! 고맙습니다! –

관련 문제