Skrapig

Web Scraping with Python Scrapy Module

Web Scraping with Python Scrapy Module
Färdigheten med webbskrapning har blivit gyllene idag, så låt oss lära oss hur vi kan få nödvändig data från webbsidor. I den här artikeln skulle vi prata om Scrapy Python-biblioteket, vad det kan göra och hur man använder det. Låt oss börja.

Varför Scrapy?

Scrapy är ett robust webbskrapningsbibliotek som ger möjlighet att ladda ner webbsidor, bilder och all data du kan tänka dig med blixtens hastighet. Hastighet är av stor vikt vid beräkning, och Scrapy arbetar på detta genom att besöka webbplatser asynkront och göra mycket bakgrundsarbete som gör att hela uppgiften ser lätt ut.

Det bör sägas att Python har andra bibliotek som kan användas för att skrapa data från webbplatser, men inget är jämförbart med Scrapy när det gäller effektivitet.

Installation

Låt oss ta en snabb titt på hur detta kraftfulla bibliotek kan installeras på din maskin.

Som med de flesta Python-bibliotek kan du installera Scrapy med pip-modulen:

pip installera Scrapy

Du kan kontrollera om installationen lyckades genom att importera skrapigt i Pythons interaktiva skal.

$ python
Python 3.5.2 (standard, 14 september 2017, 22:51:06)
[GCC 5.4.0 20160609] på Linux

Skriv "hjälp", "copyright", "credits" eller "licens" för mer information.

>>> importera skrapigt

Nu när vi är klara med installationen, låt oss komma in i det tjocka av saker.

Skapa ett webbskrapningsprojekt

Under installationen lades det skrapiga nyckelordet till sökvägen så att vi kan använda nyckelordet direkt från kommandoraden. Vi skulle dra nytta av detta under hela vår användning av biblioteket.

Kör följande kommando från den katalog du väljer:

skrapig startprojekt webbskrapa

Detta skulle skapa en katalog som heter webbskrapa i den aktuella katalogen och skrapig.CFG-fil. I webbskrapa  katalog skulle ha __i det__.py, föremål.py, mellanprodukter.py, rörledningar.py, inställningar.py filer och en katalog som heter spindlar.

Våra spindelfiler i.e. skriptet som gör webbskrapning för oss lagras i spindlar katalog.

Skriva vår spindel

Innan vi fortsätter att skriva vår spindel förväntas det att vi redan vet vilken webbplats vi vill skrapa. För syftet med den här artikeln skrapar vi ett exempel på webbskrapningswebbplats: http: // exempel.webbskrapning.com.

Den här webbplatsen har bara landnamn och deras flaggor, med olika sidor och vi kommer att skrota tre av sidorna. De tre sidorna vi skulle arbeta med är:

http: // exempel.webbskrapning.com / platser / standard / index / 0
http: // exempel.webbskrapning.com / platser / standard / index / 1
http: // exempel.webbskrapning.com / platser / standard / index / 2

Tillbaka till vår spindel, vi ska skapa ett exempel_spindel.py i spindelkatalogen. Från terminalen, en enkel tryck på sample_spider.py kommandot skulle hjälpa till att skapa en ny fil.

Efter att ha skapat filen skulle vi fylla i den med följande kodrader:

importera skrapigt
 
klass SampleSpider (skrapig.Spindel):
namn = "prov"
start_urls = [
"http: // exempel.webbskrapning.com / platser / standard / index / 0 ",
"http: // exempel.webbskrapning.com / platser / standard / index / 1 ",
"http: // exempel.webbskrapning.com / platser / standard / index / 2 "
]
 
def parse (själv, svar):
page_number = svar.url.split ('/') [- 1]
file_name = "sida .html ".format (sidnummer)
med öppen (filnamn, 'wb') som fil:
fil.skriv (svar.kropp)

Kör följande kommando från den översta nivån i projektets katalog:

skrapig krypprov

Minns att vi gav våra SampleSpider klass a namn attribut prov.

Efter att ha kört det kommandot skulle du märka att tre filer med namnet page0.html, sida 1.html, sida 2.html sparas i katalogen.

Låt oss ta en titt på vad som händer med koden:

importera skrapigt

Först importerar vi biblioteket till vårt namnområde.

klass SampleSpider (skrapig.Spindel):
namn = "prov"

Sedan skapar vi en spindelklass som vi kallar SampleSpider. Vår spindel ärver från skrapig.Spindel. Alla våra spindlar måste ärva från skrapiga.Spindel. Efter att ha skapat klassen ger vi vår spindel en namn attribut, detta namn attribut används för att kalla till spindeln från terminalen. Om du minns, körde vi skrapig krypprov kommando för att köra vår kod.

start_urls = [
 
"http: // exempel.webbskrapning.com / platser / standard / index / 0 ",
"http: // exempel.webbskrapning.com / platser / standard / index / 1 ",
"http: // exempel.webbskrapning.com / platser / standard / index / 2 "
]

Vi har också en lista med webbadresser som spindeln kan besöka. Listan måste anropas start_urls. Om du vill ge listan ett annat namn måste vi definiera en start_requests funktion som ger oss några fler funktioner. Om du vill veta mer kan du kolla in den skrapiga dokumentationen.

Oavsett, glöm inte att inkludera http: // eller https: // för dina länkar annars skulle du behöva hantera ett saknat schemafel.

def parse (själv, svar):

Vi fortsätter sedan med att deklarera en analyseringsfunktion och ge den en svarsparameter. När koden körs framkallas analyseringsfunktionen och svarobjektet skickas som innehåller all information från den besökta webbsidan.

page_number = svar.url.split ('/') [- 1]
file_name = "sida .html ".format (sidnummer)

Vad vi har gjort med den här koden är att dela upp strängen som innehåller adressen och spara sidnumret ensamt i en Sidonummer variabel. Sedan skapar vi en filnamn variabel infogar Sidonummer i strängen som skulle vara filnamnet på de filer vi skulle skapa.

med öppen (filnamn, 'wb') som fil:
fil.skriv (svar.kropp)

Vi har nu skapat filen och vi skriver innehållet på webbsidan i filen med hjälp av kropp attribut för svar objekt.

Vi kan göra mer än att bara spara webbsidan. BeautifulSoup-biblioteket kan användas för att analysera kropp.svar. Du kan kolla in denna BeautiulSoup-handledning om du inte känner till biblioteket.

Från sidan som ska skrotas, här är ett utdrag av html som innehåller de data vi behöver:

Du skulle märka att all nödvändig data är innesluten i div-taggar, så vi ska skriva om koden för att analysera html.
Här är vårt nya manus:

importera skrapigt
från bs4 importera BeautifulSoup
 
klass SampleSpider (skrapig.Spindel):
namn = "prov"
 
start_urls = [
"http: // exempel.webbskrapning.com / platser / standard / index / 0 ",
"http: // exempel.webbskrapning.com / platser / standard / index / 1 ",
"http: // exempel.webbskrapning.com / platser / standard / index / 2 "
]
 
def parse (själv, svar):
page_number = svar.url.split ('/') [- 1]
file_name = "sida .Text".format (sidnummer)
med öppen (filnamn, 'w') som fil:
html_content = BeautifulSoup (svar.body, "lxml")
div_tags = html_content.hitta ("div", "id": "resultat")
country_tags = div_tags.find_all ("div")
country_name_position = zip (range (len (country_tags)), country_tags)
för position, landnamn i landnamnposition:
fil.skriv ("landnummer : \ n".format (position + 1, landnamn.text))

Koden är ungefär densamma som den ursprungliga, men jag har lagt till BeautifulSoup i vårt namnområde och jag har ändrat logiken i analysfunktionen.

Låt oss ta en snabb titt på logiken.

def parse (själv, svar):

Här har vi definierat analyseringsfunktionen och gett den en svarsparameter.

page_number = svar.url.split ('/') [- 1]
file_name = "sida .Text".format (sidnummer)
med öppen (filnamn, 'w') som fil:

Detta gör samma sak som diskuteras i den inledande koden, den enda skillnaden är att vi arbetar med en textfil istället för en html-fil. Vi skulle spara den skrapade informationen i textfilen och inte hela webbinnehållet i html som gjort tidigare.

html_content = BeautifulSoup (svar.body, "lxml")

Vad vi har gjort i denna kod är att skicka in svar.kropp som ett argument till BeautifulSoup-biblioteket och tilldelade resultaten till html_innehåll variabel.

div_tags = html_content.hitta ("div", "id": "resultat")

Med html-innehållet analyserar vi det här genom att söka efter en div tagg som också har och id attribut med resultat eftersom det är värde, då får vi spara det i en div_tags variabel.

country_tags = div_tags.find_all ("div")

Kom ihåg att länderna fanns i div taggar också, nu får vi helt enkelt alla div och spara dem som en lista i country_tags variabel.

country_name_position = zip (range (len (country_tags)), country_tags)
 
för position, landnamn i landnamnposition:
fil.skriv ("landnummer : \ n".format (position + 1, landnamn.text))

Här itererar vi genom ländernas position bland alla landstaggar, då sparar vi innehållet i en textfil.

Så i din textfil skulle du ha något som:

land nummer 1: Afghanistan
land nummer 2: Åland
land nummer 3: Albanien
..

Slutsats

Scrapy är utan tvekan ett av de mest kraftfulla biblioteken där ute, det är väldigt snabbt och laddar i princip ner webbsidan. Det ger dig sedan friheten till vad du än vill med webbinnehållet.

Vi bör notera att Scrapy kan göra mycket mer än vi har checkat ut här. Du kan analysera data med Scrapy CSS eller Xpath-väljare om du vill. Du kan läsa upp dokumentationen om du behöver göra något mer komplicerat.

Mus AppyMouse styrplatta och muspekare för Windows-surfplattor
AppyMouse styrplatta och muspekare för Windows-surfplattor
Surfplattanvändare saknar ofta muspekaren, särskilt när de brukar använda bärbara datorer. Pekskärmen Smartphones och surfplattor har många fördelar o...
Mus Mellan musknappen fungerar inte i Windows 10
Mellan musknappen fungerar inte i Windows 10
De mittknappen hjälper dig att bläddra igenom långa webbsidor och skärmar med mycket data. Om det slutar, kommer du sluta använda tangentbordet för at...
Mus Hur man ändrar vänster och höger musknapp på Windows 10 PC
Hur man ändrar vänster och höger musknapp på Windows 10 PC
Det är en hel norm att alla datormusenheter är ergonomiskt utformade för högerhänta användare. Men det finns musenheter tillgängliga som är speciellt ...