Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapakah `re.findall()` Melemparkan `TypeError: Tidak Boleh Menggunakan Corak Rentetan pada Objek Seperti Bait` Apabila Mengekstrak URL?

Mengapakah `re.findall()` Melemparkan `TypeError: Tidak Boleh Menggunakan Corak Rentetan pada Objek Seperti Bait` Apabila Mengekstrak URL?

Susan Sarandon
Lepaskan: 2024-11-17 11:31:02
asal
672 orang telah melayarinya

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

TypeError: Tidak Boleh Menggunakan Corak Rentetan pada Objek Seperti Bait dalam re.findall()

Semasa cuba mengambil secara automatik URL daripada halaman web, anda mungkin menghadapi ralat berikut:

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

Dalam kod anda, anda menggunakan re.findall() untuk mencari padanan bagi ekspresi regex biasa. Walau bagaimanapun, apabila anda cuba menggunakan ungkapan biasa pada kandungan HTML yang telah anda ambil, anda mendapat ralat.

Punca Asas:

Isu ini berpunca daripada fakta bahawa kandungan HTML yang anda gunakan adalah dalam bentuk bait, manakala ungkapan biasa yang anda gunakan adalah dalam bentuk rentetan. Ungkapan biasa tidak boleh digunakan terus pada objek seperti bait.

Lösung:

Untuk menyelesaikan isu ini, anda perlu menukar kandungan HTML kepada rentetan:

html = response.read().decode('utf-8')
Salin selepas log masuk

Ini akan menyahkod kandungan HTML seperti bait ke dalam rentetan, membolehkan ungkapan biasa digunakan dengan jayanya.

Setelah anda membuat penukaran, anda boleh meneruskan penggunaan ungkapan biasa untuk mencari tajuk halaman web. Kod yang diperbetulkan sepatutnya kelihatan seperti ini:

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)
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah `re.findall()` Melemparkan `TypeError: Tidak Boleh Menggunakan Corak Rentetan pada Objek Seperti Bait` Apabila Mengekstrak URL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan