Analysera texter från webbsidor

By . Latest revision .

Här ska du utveckla nya moduler för att hämta texter från webbsidor och skriva data till fil. Texten ska analyseras med modulerna från kmom05. Möjligheten att spara resultatet i en JSON fil ska också finnas.

#Förkunskaper

Du har gjort Analysera text och ord.

Du har jobbat igenom artikeln “Använd externa moduler i Python för att hämta information på webben”.

#Introduktion

Så här kan det se ut när du kör ditt färdiga program.

# Generell användning av programemt
python3 main.py [options] command [arguments-to-the-command]

# Pinga en webbsida
python3 main.py ping http://dbwebb.se/humans.txt

# Hämta och skriv ut innehållet i en webbsida
python3 main.py get https://dbwebb.se/blogg/grillcon-2017-var-i-utokad-version

# Hämta och spara webbsidan på en fil
python3 main.py --output=humans.txt get https://dbwebb.se/blogg/grillcon-2017-var-i-utokad-version

# Visa upp dagens citat genom att hämta det från en webbtjänst
python3 main.py quote

# Hämta och visa titeln för en webbsida
python3 main.py title http://dbwebb.se

#Krav

  1. Kopiera innehållet från katalogen me/kmom05/analyzer till me/kmom06/analyzer2.
# Stå i me-katalogen
cp -ri kmom05/analyzer/{*.py,*.txt} kmom06/analyzer2/
  1. Följande options skall fungera.
  • -h, --help skall visa en hjälptext som beskriver ditt program och hur det används.
  • -v, --version skall visa versionen av programmet.
  • --verbose skall innebära att mer text skrivs ut, kanske bra för debugging?
  • --silent skall innebära att minimalt med utskrift sker, bra om man bara vill se svaret.
  1. Skapa tre nya moduler, en för att hantera funktionaliteten med Request (requester.py), en för BeautifulSoup (html_parser.py) och en för att skriva till fil (output_to_file.py).

  2. Pinga en webbsida med följande kommando.

python3 main.py ping <url>

Programmet skall ange status-koden för HTTP-anropet tillsammans med länken som besöktes. Ange --silent för att enbart visa statuskoden. Lagra undan resultatet i en fil. Visa innehållet i filen genom att ange kommandot.

python3 main.py ping-history
  1. Visa dagens citat genom att hämta det från en webbtjänst.
python3 main.py quote

Resultatet skall bli att citatet från webbtjänsten http://dbwebb.se/javascript/lekplats/get-marvin-quotes-using-ajax/quote.php skrivs ut.

  1. Hämta och visa titeln från en vald webbsida. Titeln är det innehåll som ligger i elementet <title></title>.
python3 main.py title <url>
  1. Ladda hem en webbsida med följande kommando.
python3 main.py get <url>
python3 main.py --output=<file> get <url>

Parsa hemsidan och hämta bara ut texten som finns i html-taggen article. Programmet kan bara användas på hemsidor där <article> finns.

Resultatet skall bli att webbsidans text från <article> skrivs ut på skärmen. Om man anger ett option --output=<file> så skall utskriften ske till en fil, istället för skärmen.

  1. Det ska gå att analysera texten i filen, som föregående krav resulterar i, med samma kommandon som används i kmom05, analysera text och ord. Resultatet från textanalysen, ska presenteras i JSON-format. Gäller samtliga kommandon för textanalys, inklusive all.
$ python3 main.py --silent lines phil.txt
{
    "lines": 1133
}

9. Validera analyzer2 genom att göra följande kommando i kurskatalogen i terminalen.

# Ställ dig i kurskatalogen
dbwebb validate analyzer2

Rätta eventuella fel som dyker upp och validera igen. När det ser grönt ut så är du klar.

Du kan också testköra ditt program och se om det går igenom rättningen.

# Ställ dig i kurskatalogen
dbwebb inspect kmom06

#Extrauppgift

  1. Lägg till ett option för att kunna hämta text från andra taggar än <article>.
# Hämtar text från alla `div` taggar istället för article
python3 main.py --tag=div get <url>
  1. Lägg till ett option för att kunna hämta text från taggar med ett id.
# Hämtar text från alla taggar med id `text` istället för article
python3 main.py --id=text get <url>
  1. Lägg till ett option för att kunna hämta text från taggar med en klass.
# Hämtar text från alla taggar med klass `text` istället för article
python3 main.py --class=text get <url>

#Tips från coachen

Validera ofta. Så slipper du en massa valideringsfel i slutet av övningen.

Använd --verbose för att skriva ut massa debugg-utskrifter när du utvecklar och testar.

Lycka till och hojta till i forumet om du behöver hjälp!

#Revision history

  • 2017-06-28: (K, aar) Tog bort krav om exit-status.
  • 2017-06-21: (J, aar) Omgjord inför AAA.
  • 2016-09-29: (I, mos) Länkade till exempel för asciibild.
  • 2015-08-25: (H, mos) Uppgraderade till dbwebb v2 samt la till extrauppgift om ascii-bild.
  • 2015-04-22: (G, mos) Förtydligade att marvin4 inte skall stödjas.
  • 2015-03-09: (F, mos) Ändrade länken till inspect.
  • 2015-02-03: (E, mos) Gjorde SQLite som valbar.
  • 2015-01-07: (D, mos) Förtydligade att seo i kombination med `–input` inte behöver url.
  • 2014-12-16: (C, mos) Tog bort extrauppgiften eftersom den ofta löstes med extern modul som gjorde uppgiften svår att rättad.
  • 2014-12-01: (B, mos) Förtydligade att title i kombination med `–input` inte behöver url.
  • 2014-10-15: (A, mos) Första utgåvan i samband med kursen python.

Document source.

Category: python.