Från HTML till text

Ett av de vanliga problem man stöter på om man skriver en egen webbcrawler/spider eller vill genomföra scraping (skrapning?) är att konvertera HTML-sidor till ren text. Detta kan tyckas som en tämligen enkel uppgift men trasig html och tolkning av html är några saker kan ställa till det en hel del.

Att exempelvis ladda in Aftonbladet.se i Python Beautifulsoup kan ta flera sekunder. Därför så sökte jag efter en lösning som inte bara är snabb men även passar sig för att baka in i en webbcrawler.

Det var då jag hittade Boilerpipe. Ett bibliotek att detektera och plocka bort runtomkring text på en webbsida och enbart returnera det som förhoppningsvis är huvudtexten på sidan.

Boilerpipe är skriven i Java men fungerar utmärkt i Python med jpype. Här finnes Python porten på github: github.com/misja/python-boilerpipe

För att sedan använda Boilerpipe i Python skriver du enbart:

from boilerpipe.extract import Extractor
extractor = Extractor(extractor='ArticleExtractor', url=your_url)

Extractor kan vara någon av följande:

  • DefaultExtractor
  • ArticleExtractor
  • ArticleSentencesExtractor
  • KeepEverythingExtractor
  • KeepEverythingWithMinKWordsExtractor
  • LargestContentExtractor
  • NumWordsRulesExtractor
  • CanolaExtractor

Jag fick bäst resultat med KeepEverythingExtractor i de få tester jag genomförde.

6 reaktioner på ”Från HTML till text

  1. Kan man parsa XML dokument med någon av dessa biblotek. Jag har använt mig av Nokogiri och Xpath på sistonde när jag ska crawla ngt. Hur gör du om skall parsa stora xml dokument?

  2. Jag har experimenterat med boilerpipe också. Min erfarenhet är att den är bra på att ta bort HTML, men inte på att få fram vad som är titel och textinnehåll på en sida. Verkar fungera bra på engelska, men svenska sajter är den rätt kass på… tyvärr.

    Skrev en bugg på det, som inte har fått någon uppmärksamhet fast skaparen tog kontakt med mig över Twitter och sa att han skulle: http://code.google.com/p/boilerpipe/issues/detail?id=16

  3. Usman Rajab: För riktigt stora XML:er behöver du en strömmande SAX-parser. Då sätter du upp event som triggas så fort en viss tag stöts på, men den bygger aldrig upp något träd i minnet. Fungerar fint för fler Gb stora filer.

  4. Usman Rajab: Precis som Emil skriver så är en strömmande parser bäst lämpad.

    Emil Stenström: Har bara testat på engelska sidor. Men kommer snart att testa på svenska, så får se hur det går.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *