URL を抽出するときに「re.findall()」が「TypeError: Can\'t Use a String Pattern on a Bytes-Like Object」をスローするのはなぜですか?

Susan Sarandon
リリース: 2024-11-17 11:31:02
オリジナル
618 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート