TypeError: re.findall() のバイト様オブジェクトで文字列パターンを使用できません
自動的にフェッチしようとしている間Web ページからの URL では、次のエラーが発生する場合があります:
TypeError: can't use a string pattern on a bytes-like object in re.findall()
コードでは、re.findall() を使用して正規表現 regex の一致を検索します。ただし、取得した HTML コンテンツに正規表現を適用しようとすると、エラーが発生します。
根本的な原因:
この問題は、実際、作業している HTML コンテンツはバイト形式ですが、使用している正規表現は文字列形式です。正規表現はバイトのようなオブジェクトに直接適用できません。
Lösung:
この問題を解決するには、HTML コンテンツを文字列に変換する必要があります。
html = response.read().decode('utf-8')
これにより、バイトのような HTML コンテンツが文字列にデコードされ、正規表現が正常に適用されるようになります。
変換が完了したら、次の使用を続けることができます。 Web ページのタイトルを検索するための正規表現。修正されたコードは次のようになります:
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 中国語 Web サイトの他の関連記事を参照してください。