Kontakta författare

Introduktion

Under de senaste åren har flera brott lösts av vanliga människor som har tillgång till internet. Någon utvecklade till och med en seriemördare. Oavsett om du är en fan av verkliga brottshistorier och bara vill läsa lite extra eller om du vill använda den här brottrelaterade informationen för din forskning, hjälper den här artikeln dig att samla in information från dina webbplatser du väljer.

I den här artikeln kommer jag att guida dig genom att samla information från två olika webbplatsformat och förklara några kodblock och hur vi kom fram till dem. Om du behöver en mer detaljerad handledning för alla komponenter i koden, rekommenderar jag starkt att du tittar på Corey Schafers Youtube-handledning.

Krav

Pytonorm

Jag använder Python 3.6.8 men du kan använda andra versioner. En del av syntaxen kan vara annorlunda, särskilt för Python 2-versioner.

Vacker soppa

När du är klar med att installera Python kan du få Beautiful Soup genom att ange "pip install beautifulsoup4" i din terminal. Besök Crummy för mer information.

Steg för steg

Vi samlar in våra berättelser från följande webbplatser:

  • Bizarrepedia - https://www.bizarrepedia.com/
  • Criminal Minds - https://criminalminds.fandom.com/

För att göra detta måste vi först skanna igenom webbplatsens sidor och artiklar så att vi kan berätta för vårt program var vi ska titta. Varje webbplats har en annan struktur så en källkod passar inte alla.

Vi följer stegen nedan för varje webbplats:

  1. Identifiera hur många brottrelaterade sidor webbplatsen har.
  2. Skriv koden för att navigera från första sidan till den sista.
  3. Skriv koden för att skanna igenom berättelser på varje sida.

Skrapa Bizarrepedia

Steg 1: Identifiera hur många brottrelaterade sidor webbplatsen har

Låt oss börja med Bizarrepedias brottkategori.

Gå till https://www.bizarrepedia.com/crime och bläddra ner tills du ser knappen som säger "LADDA MER POSTER".

Huvudsidan i kategorin "Brott".

Högerklicka på knappen "LOAD MORE POSTS" och klicka på "Inspect Element" för att öppna webbläsarens fönster för utvecklarverktyg (jag använder Firefox). Du kommer att se något liknande:

Här kan vi se att det finns 11 brottsrelaterade sidor och 108 artiklar. Vi är för närvarande på sidan 1.

Fönstret för verktyg för utvecklare.

Stäng fönstret för utvecklarverktyg och klicka på knappen "LADDA MER POSTER".

URL: en i adressfältet kommer att ändras till "https://www.bizarrepedia.com/crime/#page/2", knappen kommer att försvinna och en ny lista med artiklar visas nedan där knappen brukade vara.

Nu kan vi se alla artiklarna från sida 1 till 2. Gå till "https://www.bizarrepedia.com/crime/page/2/" för att bara få åtkomst till artiklarna på sidan 2.

Page 2 artiklar.

Bizarrepedias format

Om du bläddrar längre ner hittar du knappen igen och om du klickar på den ändras sidnumret i URL: en till 3, knappen försvinner igen, en ny lista med artiklar kommer att visas och så vidare. Detta format är inte detsamma för alla webbplatser. Vissa webbplatser leder dig helt enkelt till en annan sida istället för att ladda nya artiklar längst ner.

Vi kunde ladda dessa artiklar genom att interagera med webbplatsens användargränssnitt men när vi skriver koden för att navigera till olika sidor kan vi inte interagera med användargränssnittet (det finns verktyg för att göra det som Selenium men i det här exemplet, vi kommer bara att använda vackra soppa för att hålla det enkelt). Vi måste ta reda på den exakta webbadressen för varje sida så att vi kan gå igenom dem i vår kod.

Låt oss börja med koden nedan

Det tryckta resultatet som du får från koden nedan liknar innehållet du ser när du går till "https://www.bizarrepedia.com/crime/", högerklicka på ett tomt utrymme var som helst på sidan och klicka på "Visa sidkälla" eller genom att skriva texten nedan i adressfältet:

vy-källa: https: //www.bizarrepedia.com/crime/

Denna sida är vår utgångspunkt och vi kommer att få all den information vi behöver för att navigera genom sidorna och deras artiklar genom att börja här.

 importera förfrågningar från bs4 importera BeautifulSoup # Hämta alla sidor url = "https://www.bizarrepedia.com/crime/" response = request.get (url) soppa = BeautifulSoup (response.text, "lxml") print (soppa. försköna()) 

Visa källa.

Resultatet efter att ha kört Python-koden.

Steg 2: Skriv koden för att navigera från första sidan till den sista

Nu kan vi använda den linje vi såg tidigare i webbläsarens fönster för verktyg för utvecklare :

Vi lägger till en rad i koden för att få det totala antalet sidor att gå igenom. Vi hittar "a" -element som har attributet "data-num-sides" och får detta attributvärde.

 importera förfrågningar från bs4 importera BeautifulSoup # Hämta alla sidor url = "https://www.bizarrepedia.com/crime/" response = request.get (url) soppa = BeautifulSoup (respons.text, "lxml") sidor = int ( soup.find ("a", {"data-num-sides": True}) ["data-num-sides"]) för sida inom räckvidd (1, sidor + 1): if page == 1: # First sidan har inget sidnummer url = "https://www.bizarrepedia.com/crime" annars: url = "https://www.bizarrepedia.com/crime/page/" + str (sida) 

Få antal sidor

I rad 9 får vi antalet sidor genom att först hitta ett "a" -element som har ett attribut som heter "data-num-sides" ( sant ). Vi hämtar attributets värde med ["data-num-sides"] . Sedan lindar vi den raden i int () så att vi kan använda den för intervallet när vi går igenom alla sidorna. Detta ger oss värdet 11.

Looping genom sidorna

I rad 11 använder vi en för loop för att gå igenom sidnummer 1 till 11. Vi lägger till 1 till det totala antalet sidor sedan vi startade vårt intervall med 1 istället för standard 0. Om vi ​​inte gör det, slingan kommer att sluta klockan 11 och vi kommer att sakna artiklarna på sidan 11.

Inuti for-loopen har vi lagt till ett if-förhållande för att använda den ursprungliga URL-adressen för brott för sida 1 och lägga till "/ page /" för sidorna 2 till 11. Detta beror på att det inte finns något "https://www.bizarrepedia.com/ brott / sida / 1" .

Ser?

Steg 3: Skriv koden för att skanna igenom berättelser på varje sida

När vi går igenom sidorna använder vi varje sidas URL för att skanna igenom berättelserna. Varje berättelse har ett ämne och en huvudhistoria. Ämnet är vem den kriminella är till exempel John Wayne Gacy. Huvudhistorien är hela historien om brottslingen. På denna webbplats är hela berättelsen uppdelad i olika stycken. Vi kombinerar dessa stycken och skriver ut resultatet.

 importera förfrågningar från bs4 importera BeautifulSoup # Hämta alla sidor url = "https://www.bizarrepedia.com/crime/" response = request.get (url) soppa = BeautifulSoup (respons.text, "lxml") sidor = int ( soup.find ("a", {"data-num-sides": True}) ["data-num-sides"]) för sida inom räckvidd (1, sidor + 1): if page == 1: # First sidan har inget sidnummer url = "https://www.bizarrepedia.com/crime" annars: url = "https://www.bizarrepedia.com/crime/page/" + str (sida) # Hämta varje svar på historien = request.get (url) soppa = BeautifulSoup (respons.text, "lxml") berättelser = soppa.find_all ("a", {"klass": "bx"}) för berättelse i berättelser: respons = förfrågningar.get ( story ["href"]) soppa = BeautifulSoup (respons.text, "lxml") ämne = soup.find ("h1", {"class": "entry"}). text main_story = soppa.find ("div", {"class": "typography"}) blocks = main_story.find_all ("p") full_story = "" för block in blocks: full_story = full_story + block.text + "\ n \ n" tryck (ämne + "\ n \ n "+ full_story) break break 

I rad 18 - 20 hämtar vi alla "a" -element med ett "klass" -attributvärde för "bx". Vi får detta genom att högerklicka på en av titlarna på sidan och klicka på "Inspektera elementet" som vi gjorde tidigare. Detta öppnar webbläsarens utvecklarverktyg och vi hittar länken till historien.

Länken till historien.

I rad 22 - 27 går vi igenom varje webbadress som vi hittade. Vi får ämnet genom att sväva över historiens titel och inspektera elementet. Vi finner att titeln är inuti ett "h1" -element med ett "klass" -värde för "post". Vi får texten inuti elementet med hjälp av .text .

 subject = soup.find ("h1", {"class": "entry"}). text 

Ämne: Historiens titel.

Vi får huvudhistorien genom att sväva över berättelsens kropp och inspektera elementet. Vi kommer att upptäcka att hela historien är separerad i stycken eller "p" -element, som alla finns i ett "div" -element med ett "klass" -värde av "typografi".

 main_story = soup.find ("div", {"class": "typography"}) block = main_story.find_all ("p") 

Vi förklarar en ny variabel med namnet "full_story", slingrar genom varje stycke och lägger till varje stycke till variabelns värde. När vi har fått hela historien eller om det inte finns fler stycken att skriva igenom skriver vi ut ämnet och hela historien.

 full_story = "" för block i block: full_story = full_story + block.text + "\ n \ n" utskrift (ämne + "\ n \ n" + full_story) 

Du kommer att märka att det finns pauser i raderna 33 och 34. Detta används för att bryta två för öglor - berättelser loopen och sidor loop. Du kan ta bort dessa pauser för att skrapa alla berättelser på alla sidor. I det här exemplet har jag bara lagt till dem så att vi bara kan få en berättelse. Om du kör koden ger du utskriften nedan.

Resultatet av att skrapa en av Bizarrepedias berättelser.

Skrapa kriminella sinnen

Steg 1: Identifiera hur många brottrelaterade sidor webbplatsen har

Låt oss fortsätta med Criminal Minds seriekiller-kategori.

Gå till https://criminalminds.fandom.com/wiki/Real_Criminals/Serial_Killers.

Huvudsidan i kategorin "Serial Killers".

Steg 2: Skriv koden för att navigera från första sidan till den sista

Criminal Minds webbplatsens format är lite mer enkelt så att vi kan hoppa över detta steg. Alla historier kan nås via den här sidan. Om du bläddrar längre ner ser du att alla ämnen listas i alfabetisk ordning.

Steg 3: Skriv koden för att skanna igenom berättelser på varje sida

Eftersom vi bara har en sida kan vi fortsätta skanna igenom berättelserna. Resten av stegen är ganska lika med vad vi gjorde för Bizarrepedia. Criminal Minds-webbplatsen har ett intressant "offert" -block för varje ämne så jag bestämde mig för att inkludera den.

Om du följer stegen vi gjorde när du skrapade berättelser från Bizarrepedia, bör du få en kod som liknar den nedan. De behöver inte vara exakt samma eftersom det finns flera sätt att göra saker och du kan välja vilka element du vill börja med så länge du får samma resultat.

 importera förfrågningar från bs4 importera BeautifulSoup # Hämta alla historier url = "https://criminalminds.fandom.com/wiki/Real_Criminals/Serial_Killers" response = request.get (url) soppa = BeautifulSoup (respons.text, "lxml") berättelser = soup.find_all ("div", {"class": "lightbox-caption"}) för berättelse i berättelser: # Hämta varje berättelse url = "https://criminalminds.fandom.com" + story.find ("a ") [" href "] response = request.get (url) soppa = BeautifulSoup (response.text, " lxml ") main_story = soup.find (" div ", {" id ":" mw-content-text "} ) quote = "" .join (main_story.find ("tabell"). text.split ()) subject = story.find ("a") ["title"] blocks = main_story.find_all ("p") full_story = "" för block i block: full_story = full_story + block.text + "\ n" skriva ut (offert + "\ n" + ämne + "\ n \ n" + full_story) break 

Resultatet av att skrapa en av Criminal Minds berättelser.

Till sist

Nu när du kan samla in den här informationen, vad tänker du göra med dem? Visst kommer du inte att vara nöjd med att se resultaten som detta. I nästa artikel kommer jag att guida dig genom att ladda all denna information till Elasticsearch. Detta gör att vi kan spara berättelserna, söka igenom dem och extrahera användbar och strukturerad information från dem som aktivitetsdatum, offer, vapen etc.