Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `re.findall()` Melemparkan `TypeError: Tidak Boleh Menggunakan Corak Rentetan pada Objek Seperti Bait` Apabila Mengekstrak URL?
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()
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')
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)
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!