내 코드는 다음과 같습니다.
dataFile = open('dataFile.html', 'w')
res = requests.get('site/pm=' + str(i))
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, 'html.parser')
linkElems = soup.select('#content')
dataFile.write(str(linkElems[0]))
다른 코드가 있지만 이것이 문제가 있다고 생각하는 코드입니다. 또한 다음을 사용해 보았습니다.
dataFile.write(str(linkElems[0].decode('utf-8')))
그러나 그것은 작동하지 않고 오류를 제공합니다.
사용 dataFile = open('dataFile.html', 'wb')
하면 오류가 발생합니다.
a bytes-like object is required, not 'str'
인코딩을 지정하지 않고 텍스트 파일을 열었습니다.
dataFile = open('dataFile.html', 'w')
이것은 파이썬에게 시스템 의 기본 코덱 을 사용하도록 지시 합니다 . 쓰려고하는 모든 유니 코드 문자열은 해당 코덱으로 인코딩되며 Windows 시스템은 UTF-8을 기본값으로 설정하지 않습니다.
인코딩을 명시 적으로 지정합니다.
dataFile = open('dataFile.html', 'w', encoding='utf8')
다음으로 HTML 데이터가 사용하는 인코딩을 알기 위해 HTTP 서버를 신뢰합니다. 이것은 일반적으로 전혀 설정되지 않으므로 사용하지 마십시오 response.text
! 여기서 잘못한 것은 BeautifulSoup이 아니며 Mojibake를 다시 인코딩하고 있습니다 . requests
라이브러리는 라틴어-1 인코딩을 기본값으로 text/*
그 기본이라는 HTTP 표준 상태에 있기 때문에, 서버가 명시 적으로 인코딩을 지정하지 않는 콘텐츠 형식.
유일한 시간 요청이 명시 적 캐릭터 세트는 HTTP 헤더에 존재하지 않는 경우 이것이하지 않을 및
Content-Type
헤더가 포함되어 있습니다text
. 이 상황에서 RFC 2616은 기본 문자 집합이이어야 함을 지정합니다ISO-8859-1
. 이 경우 요청은 사양을 따릅니다. 다른 인코딩이 필요한 경우Response.encoding
속성을 수동으로 설정 하거나 rawResponse.content
.
대담하게 강조합니다.
으로 이동 response.content
하는 대신 원시 데이터 :
soup = bs4.BeautifulSoup(res.content, 'html.parser')
BeautifulSoup 4는 일반적으로 HTML <meta>
태그 또는 제공된 바이트의 통계 분석 에서 구문 분석 할 때 사용할 올바른 인코딩을 알아내는 데 큰 역할을 합니다. 서버가 문자 집합을 제공하는 경우에도 응답에서 BeautifulSoup으로 전달할 수 있지만 requests
기본값을 사용하는 경우 먼저 테스트하십시오 .
encoding = res.encoding if 'charset' in res.headers.get('content-type', '').lower() else None
soup = bs4.BeautifulSoup(res.content, 'html.parser', encoding=encoding)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다