58 lines
2.4 KiB
Markdown
58 lines
2.4 KiB
Markdown
[English](Hacker-News) · **Dansk** · [Bahasa Melayu](Hacker-News-ms)
|
|
|
|
# Scraping af Hacker News
|
|
|
|
Forelæsning: *Scraping af et live-websted*. Koden er `hacker_news.py` (parsing) og `http_client.py` (ét `requests.get` med timeout og `User-Agent`). Kommandoerne læser kursets statiske kopi af siden; `--source live` læser det rigtige websted, og `--source fixture` læser den gemte kopi uden netværk.
|
|
|
|
## Trin 1: se på siden
|
|
|
|
Siden viser historier med en titel, et link og en score.
|
|
|
|

|
|
|
|
**Hvad vi lærte:** live-data er rigere end en lokal fil, men de kan ændre sig, så vi gemmer også en kopi til testene.
|
|
|
|
## Trin 2: undersøg markup
|
|
|
|
Browserens udviklerværktøjer viser tagsene: en række `tr.athing`, titellinket `.titleline > a` og en `span.score` i næste række.
|
|
|
|

|
|
|
|
**Hvad vi lærte:** vi finder det rigtige tag ved at undersøge siden, før vi skriver kode.
|
|
|
|
## Trin 3: titler
|
|
|
|
`find_all` på titellinkene og `get_text()`.
|
|
|
|

|
|
|
|
**Hvad vi lærte:** en list comprehension gør mange tags til en almindelig liste af strenge.
|
|
|
|
## Trin 4: links
|
|
|
|
`get("href")` på de samme links.
|
|
|
|

|
|
|
|
**Hvad vi lærte:** det samme element giver både tekst og attributværdier.
|
|
|
|
## Trin 5: upvotes
|
|
|
|
Teksten `38 points` deles op og omdannes med `int()`.
|
|
|
|

|
|
|
|
**Hvad vi lærte:** scrapet tekst skal omdannes til tal, før den kan sammenlignes.
|
|
|
|
## Trin 6: den øverste historie
|
|
|
|
`max` over upvotes finder den mest populære artikel.
|
|
|
|

|
|
|
|
**Hvad vi lærte:** når data er rene, besvarer almindelig Python spørgsmål om dem.
|
|
|
|
## Hvad vi lærte
|
|
|
|
Vi kan hente en side med Requests, finde rækkerne, læse titler, links og scores, omdanne dem til brugbare typer og besvare et spørgsmål om data.
|