2014-03-04 5 views
2

웹 페이지 스크래퍼를 만들려고하는데 BeautifulSoup을 사용하고 싶습니다. 웹 사이트가 Python 3.x와 호환되었다고 말하면서 BeautifulSoup 4.3.2를 설치했습니다. 사용하려면BeautifulSoup4 Python 3.x에서 오류가 발생했습니다.

pip install beautifulsoup4 

을 사용하십시오. 내가

from bs4 import BeautifulSoup 
import requests 

url = input("Enter a URL (start with www): ") 

link = "http://" + url 

data = requests.get(link).content 

soup = BeautifulSoup(data) 

for link in soup.find_all('a'): 

    print(link.get('href')) 

을 실행할 때 내가 특별히 여기에,

Traceback (most recent call last): 
File "/Users/user/Desktop/project.py", line 1, in <module> 
    from bs4 import BeautifulSoup 
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/site-packages /bs4/__init__.py", line 30, in <module> 
from .builder import builder_registry, ParserRejectedMarkup 
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/site-packages/bs4/builder /__init__.py", line 308, in <module> 
from .. import _htmlparser 
    ImportError: cannot import name _htmlparser 
+0

대신'data = link.text'를'data = requests.get (link) .content'로 바꾸고 코드를 다시 실행해볼 수 있습니까? 내가 본 것을 보았을 때 URL의 내용을 얻기 위해'Requests'를 호출하지 않고 그냥'link.text'로 곧바로갔습니다. – Manhattan

+0

위에서 언급 한 변경 사항을 적용했지만 BeautifulSoup의 가져 오기 오류를 지나치지는 않습니다. Python 2에서 작동하는 것으로 알고 있습니다.7하지만 im은 python 3을 사용해야하고 왜 제대로 가져 오지 않는지 이해하지 못합니다. – heyItsTy1992

+0

이 버그에 대한 관련 토론은 [this] (http://bugs.python.org/issue14538)를 참조하십시오. * 최신 * Python 3.x 릴리스를 사용해 보셨습니까? 나는이 문제가 존재하지 않는 곳에서 2.7을 사용하여 정말로 논평 할 수 없다. 그래도 파이썬 3.x로 확인합니다 ... – Manhattan

답변

1

내 끝에 Python 3.x를 설치하고 BS4의 최신 다운로드를 테스트했습니다. 일하지 않았어. 그러나 여기 수정본은 https://github.com/il-vladislav/BeautifulSoup4입니다 (GitHub 사용자 인 Il Vladislav에게 크레딧을 주시면됩니다).

우편 번호를 다운로드하고 BeautifulSoup 다운로드 내 bs4 폴더를 덮어 쓰고 python setup.py install을 통해 다시 설치하십시오. 작업이 끝나기 전에 오류가있는 곳의 스크린 샷에서 볼 수 있듯이 이제 끝까지 작동합니다.

코드 :

from bs4 import BeautifulSoup 
import requests 

url = input("Enter a URL (start with www): ") 
link = "http://" + url 
data = requests.get(link).content 
soup = BeautifulSoup(data) 

for link in soup.find_all('a'): 
    print(link.get('href')) 

스크린 샷 : here을 발견

enter image description here

관련 SO 주제, 그 BS4을 보여주는 것은 아직 완전히 파이썬 3.x를 호환되지 않습니다 (2 년 후에도). 난 그냥 편집

+0

당신의 도움에 너무 감사드립니다 !! 당신이 언급 한 zip 파일을 보지 못했습니다. 나는 bs4, .gitattributes 및 .gitignore가 그 중 하나라는 것을 알고 있습니까? 당신이 올바른 방향으로 나를 가리키는 마음을하지 않으면 나는 그것을 대단히 감사 할 것입니다! 편집 : Nevermind 내가 찾았 어 :) – heyItsTy1992

+0

그 정확한 링크의 오른쪽 하단에는'다운로드 ZIP' 옵션이 있습니다. 'BeautifulSoup4-master' ZIP 파일을 주어야합니다. 그것을 추출하고 안에 들어가서'bs4' 폴더를 찾으십시오. 그것을 복사하고 원래'BeautifulSoup4' 다운로드 안에'bs4' 폴더를 덮어 씁니다. 그런 다음 커맨드 라인을 통해'BeautifulSoup'을 다시 설치하십시오. – Manhattan

+0

감사합니다! 나는 BS4 오류를 제거했다. 이제 필자는 모듈 요청이 없기 때문에 요청을 설치해야합니다. 나는 그것을 pip와 함께 설치했다고 생각했다. – heyItsTy1992

1

내가 소스 파일에 오류가있을 수 있습니다 생각라는 오류가 발생합니다 :

내 설치에
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/site-packages/bs4/builder /__init__.py", line 308, in <module> 
    from .. import _htmlparser 

, 라인 308은 bs4/builder /__init__.py

from . import _htmlparser 

bs4가 성공적으로 가져올 수 있을지도 모릅니다. 설치 한 bs4 버전은 4.3.2이고 _htmlparser.pybs4/builder

0

bs4/builder/_htmlparser.py 그렇게

A) HTMLParseError가 HTMLParseError 클래스는 아마

class HTMLParseError(Exception): 
    """Exception raised for all parse errors.""" 

    def __init__(self, msg, position=(None, None)): 
     assert msg 
     self.msg = msg 
     self.lineno = position[0] 
     self.offset = position[1] 

    def __str__(self): 
     result = self.msg 
     if self.lineno is not None: 
      result = result + ", at line %d" % self.lineno 
     if self.offset is not None: 
      result = result + ", column %d" % (self.offset + 1) 
     return result 

을 정의)

from html.parser import HTMLParser 

B 수입되지 않았 음을 최고의 아니다 HTMLParserError가 발생하지 않기 때문입니다. 그러나! 귀하의 예외는 잡히지 않고 어쨌든 처리되지 않습니다.

관련 문제