Modern webbskrapning med BeautifulSoup och Selen

Översikt

HTML är nästan intuitivt. CSS är en stor framsteg som tydligt skiljer strukturen på en sida från dess utseende. JavaScript lägger till lite pizazz. Det är teorin. Den verkliga världen är lite annorlunda.

I den här handledningen lär du dig hur innehållet du ser i webbläsaren faktiskt görs och hur du ska skrapa om det behövs. I synnerhet lär du dig att räkna Disqus kommentarer. Våra verktyg kommer att vara Python och fantastiska paket som förfrågningar, BeautifulSoup och Selen.

När ska du använda webbskrapning?

Webbskrapning är praxis att automatiskt hämta innehållet på webbsidor som är utformade för interaktion med mänskliga användare, analysera dem och extrahera viss information (eventuellt navigera länkar till andra sidor). Det är ibland nödvändigt om det inte finns något annat sätt att extrahera nödvändig information. Idealt sett tillhandahåller programmet ett dedikerat API för att få tillgång till dess data programmerat. Det finns flera anledningar att webbskrapning borde vara din sista utväg:

  • Den är ömtålig (de webbsidor du skrapar kan ändras ofta).
  • Det kan vara förbjudet (vissa webbappar har policy mot skrapning).
  • Det kan vara långsamt och expansivt (om du behöver hämta och vada genom mycket ljud).

Förstå webbsidor på realtid

Låt oss förstå vad vi står inför, genom att titta på produktionen av en vanlig gemensam webbapplikationskod. I artikeln Introduktion till Vagrant finns det några Disqus-kommentarer längst ner på sidan:

För att skrapa dessa kommentarer måste vi hitta dem på sidan först.

Visa sidans källa

Varje webbläsare sedan början av 1990-talet har stödt möjligheten att visa HTML på den aktuella sidan. Här är ett utdrag ur visningskällan Introduktion till Vagrant som börjar med en stor bit av minifierad och uglified JavaScript som inte är relaterad till själva artikeln. Här är en små del av det:

Här är en viss HTML från sidan:

Det här ser ganska rörigt ut, men det som förvånar är att du inte hittar Disqus-kommentarerna i källan till sidan.

Den Mighty Inline Frame

Det visar sig att sidan är en mashup, och Disqus-kommentarerna är inbäddade som en iframe (inline frame) -element. Du kan ta reda på det genom att högerklicka på kommentarfältet och du ser att det finns raminformation och källa där:

Det låter vettigt. Inbäddning av innehåll från tredje part som iframe är en av de främsta anledningarna till att använda iframes. Låt oss hitta