Från HTML till text

2012-03-12 – 13:55

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.

Gillar du detta inlägg? Sharing is caring:
Bloggy Pusha Facebook TwitThis Maila artikeln! Skriv ut artikeln!
Du bör också läsa något av följande inlägg:
  1. 6 Responses to “Från HTML till text”

  2. 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?

    Skrivet av Usman Rajab, Mar 12, 2012

  3. 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

    Skrivet av Emil Stenström, Mar 12, 2012

  4. 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.

    Skrivet av Emil Stenström, Mar 12, 2012

  5. 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.

    Skrivet av Jonas, Mar 12, 2012

  6. Tack för tipset Jonas, har en utvecklare som sitter och pillar med en crawler nu, bett han kika in på inlägget :)

    Skrivet av Fredrik Johansson, Apr 14, 2012

  1. 1 Trackback(s)

  2. Mar 13, 2012: Hackernytt | Om startups och allt som hör till. På svenska. | Från HTML till text med Boilerpipe

Skriv en kommentar