>백엔드 개발 >파이썬 튜토리얼 >URL을 추출할 때 `re.findall()`에서 `TypeError: Can\'t Use a String Pattern on a Bytes-Like Object`가 발생하는 이유는 무엇입니까?

URL을 추출할 때 `re.findall()`에서 `TypeError: Can\'t Use a String Pattern on a Bytes-Like Object`가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-17 11:31:02683검색

Why Does `re.findall()` Throw a `TypeError: Can't Use a String Pattern on a Bytes-Like Object` When Extracting URLs?

TypeError: re.findall()의 바이트 유사 객체에 문자열 패턴을 사용할 수 없습니다.

자동으로 가져오는 동안 웹페이지의 URL에서 다음 오류가 발생할 수 있습니다.

TypeError: can't use a string pattern on a bytes-like object in re.findall()

코드에서 re.findall()을 사용하여 정규식 정규식과 일치하는 항목을 찾습니다. 그러나 가져온 HTML 콘텐츠에 정규식을 적용하려고 하면 오류가 발생합니다.

기본 원인:

이 문제는 작업 중인 HTML 콘텐츠는 바이트 형식인 반면, 사용 중인 정규식은 문자열 형식이라는 사실입니다. 정규 표현식은 바이트형 객체에 직접 적용할 수 없습니다.

Lösung:

이 문제를 해결하려면 HTML 콘텐츠를 문자열로 변환해야 합니다.

html = response.read().decode('utf-8')

이렇게 하면 바이트 형식의 HTML 콘텐츠가 문자열로 디코딩되어 정규 표현식이 성공적으로 적용될 수 있습니다.

변환이 완료되면 다음을 사용할 수 있습니다. 웹페이지 제목을 찾는 정규식입니다. 수정된 코드는 다음과 같습니다.

import urllib.request
import re

url = "http://www.google.com"
regex = r'<title>(,+?)</title>'
pattern = re.compile(regex)

with urllib.request.urlopen(url) as response:
   html = response.read().decode('utf-8')

title = re.findall(pattern, html)
print(title)

위 내용은 URL을 추출할 때 `re.findall()`에서 `TypeError: Can't Use a String Pattern on a Bytes-Like Object`가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.