Kirchhoff Skrevet 13. desember 2015 Del Skrevet 13. desember 2015 Hei, Teksthåndteringen i python er helt grusom. Hvorfor får jeg ingen match her: # -*- coding: utf-8 -*- #coding: utf-8 import urllib2 import re aa = [] aa.append(re.compile(".*å.*")) aa.append(re.compile(u".*å.*", re.UNICODE)) aa.append(re.compile(".*å.*", re.UNICODE)) aa.append(re.compile(unicode(".*å.*", "utf-8"), re.UNICODE)) aa.append(re.compile(unicode(".*å.*", "utf-8"))) response = urllib2.urlopen("http://www.ulv.no") html = response.read() for i in range(0,len(aa)): if aa[i].match(html): print i, "html" html = <html> <head> <title>www.ulv.no</title> </head> <body bgcolor=#FFFFFF> <center> <br> <br> <font face="Arial,Helvetica"> <font size=+1><b>www.ulv.no</b></font> <br> <br> <img src="ulv.jpg" width=200 height=303 alt="Foto: Tom Schandy"><br> Ulver er ålreite dyr.<br>Ulven spiser bl.a. <a href="http://www.sau.no/">sau</a> og <a href="http://www.elg.no/">elg</a>. <br> <br> <br> <br> <font size=0>Domenet er registrert gjennom <a href="http://www.domeneshop.no/">domeneshop.no</a>.</font> </font> </center> </body> </html> (Ja jeg bruker regex til å parse html. Skyt meg) Lenke til kommentar
Emancipate Skrevet 13. desember 2015 Del Skrevet 13. desember 2015 Du har sikkert hørt sitatet: Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. Tegnkoden i html-strengen må sikkert være den samme som tegnkoden i kildekoden. Sjekk om de er det samme: print ord("å") print ord(html[num]) // der num er indexen til bokstaven å. Lenke til kommentar
Kirchhoff Skrevet 13. desember 2015 Forfatter Del Skrevet 13. desember 2015 Du har sikkert hørt sitatet: Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. Tegnkoden i html-strengen må sikkert være den samme som tegnkoden i kildekoden. Sjekk om de er det samme: print ord("å") print ord(html[num]) // der num er indexen til bokstaven å. print ord("å") TypeError: ord() expected a character, but string of length 2 found print ord(html[247]) gir: 229 Lenke til kommentar
Emancipate Skrevet 13. desember 2015 Del Skrevet 13. desember 2015 Prøv ord('å') (single quotes) Lenke til kommentar
Kirchhoff Skrevet 13. desember 2015 Forfatter Del Skrevet 13. desember 2015 Gir samme feilmelding Lenke til kommentar
snippsat Skrevet 13. desember 2015 Del Skrevet 13. desember 2015 (endret) (Ja jeg bruker regex til å parse html. Skyt meg) Ja hvorfor det det? Dette hadde vel vært kort tid og løse i Beautiful Soup eller lxml. Disse behandler også Unicode også korrekt. For original re modle in standar libary så behandler denne ikke Unicode korrekt. Bruke regex module som kan behandle Unicode,forkarerer litt om det i siste post her. Endret 13. desember 2015 av snippsat Lenke til kommentar
Emancipate Skrevet 13. desember 2015 Del Skrevet 13. desember 2015 Beklager, jeg leste ikke feilmeldingen din skikkelig. Men den forteller deg jo hva problemet er (som var det vi ønsket): "å" (som streng i kildekoden) bruker tegnesett utf-8 (og bruker 2 bytes). www.ulv.no bruker tegnsett windows-1252 e.l. der å er kodet som en byte med verdien 229. >>> ord('å'[0]) 195 >>> ord('å'[1]) 165 >>> Lenke til kommentar
Kirchhoff Skrevet 13. desember 2015 Forfatter Del Skrevet 13. desember 2015 Hvordan gjør jeg html til en utf-8 Unicode streng? Lenke til kommentar
snippsat Skrevet 13. desember 2015 Del Skrevet 13. desember 2015 (endret) Hvordan gjør jeg html til en utf-8 Unicode streng? Beautiful Soup gjøre dette for deg automatisk. Du leser med Inn med Request og sender til Beautiful Soup. Eks. import requests from bs4 import BeautifulSoup url = 'http://CNN.com' page = requests.get(url) soup = BeautifulSoup(page.content, 'html.parser') tag = soup.find('title') print(tag.text) #--> Breaking News, U.S., World, Weather, Entertainment & Video News - CNN.com Endret 13. desember 2015 av snippsat 1 Lenke til kommentar
FraXinuS Skrevet 14. desember 2015 Del Skrevet 14. desember 2015 (endret) Her er en som funker: # -*- coding: utf-8 -*- import urllib2 import re aa = [] aa.append(re.compile(u".*å.*")) aa.append(re.compile(u".*å.*".encode('iso-8859-1'))) response = urllib2.urlopen("http://www.ulv.no") html = response.read() for i in range(0,len(aa)): if aa[i].search(html): # search istedenfor match print i, "html" Legg merke til at jeg byttet ut match med search. Hvis du vil bruke match må du bruke flagget re.S. Hvordan gjør jeg html til en utf-8 Unicode streng?html = html.decode('iso-8859-1') Dette gjør den om til en python unicode-string, som ikke er det samme som utf-8. Hvis du vil ha den som en utf-8 byte-string så encoder du bare unicode-stringen til utf-8. Endret 14. desember 2015 av FraXinuS 2 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå