Strganje

Spletno strganje z modulom za strganje Python

Spletno strganje z modulom za strganje Python
Spretnost strganja po spletu je danes postala zlata, zato se naučimo, kako lahko dobimo potrebne podatke s spletnih strani. V tem članku bi govorili o knjižnici Scrapy Python, kaj lahko naredi in kako jo uporabljati. Začnimo.

Zakaj Scrapy?

Scrapy je robustna knjižnica za strganje po spletu, ki omogoča hitro nalaganje spletnih strani, slik in kakršnih koli podatkov, ki bi si jih lahko omislili. Hitrost je pri računanju zelo pomembna in Scrapy pri tem deluje tako, da asinhrono obiskuje spletna mesta in opravi veliko dela v ozadju, tako da je celotna naloga videti enostavna.

Treba je povedati, da ima Python še druge knjižnice, ki jih je mogoče uporabljati za strganje podatkov s spletnih mest, vendar nobena ni primerljiva s Scrapijem, ko gre za učinkovitost.

Namestitev

Oglejmo si na hitro, kako je mogoče to zmogljivo knjižnico namestiti v vaš računalnik.

Kot pri večini knjižnic Python lahko tudi Scrapy namestite z uporabo pip modula:

pip namestite Scrapy

Ali je bila namestitev uspešna, lahko preverite tako, da uvozite odstranjevanje v interaktivni lupini Pythona.

$ python
Python 3.5.2 (privzeto, 14. september 2017, 22:51:06)
[GCC 5.4.0 20160609] na Linuxu

Za več informacij vnesite »pomoč«, »avtorske pravice«, »dobropisi« ali »licenca«.

>>> odstranjevanje uvoza

Zdaj, ko smo končali z namestitvijo, pojdimo v debelino stvari.

Ustvarjanje projekta za strganje po spletu

Med namestitvijo je bila na pot dodana ključna beseda scrapy, tako da jo lahko uporabimo neposredno iz ukazne vrstice. To bi izkoristili ves čas uporabe knjižnice.

V izbranem imeniku zaženite naslednji ukaz:

strganje startproject spletnik

S tem bi ustvarili imenik z imenom spletnik v trenutnem imeniku in odstranjevanju.cfg. V spletnik  imenik bi imel __v__.py, predmeti.py, vmesni izdelki.py, cevovodi.py, nastavitve.py datoteke in imenik z imenom pajki.

Naše pajkove datoteke i.e. skript, ki nam omogoča spletno zaščito, bi bil shranjen v pajki imenik.

Pisanje našega pajka

Preden nadaljujemo s pisanjem našega pajka, se pričakuje, da že vemo, katero spletno stran želimo strgati. Za namen tega članka strgamo po vzorcu spletnega mesta: http: // example.spletanje.com.

Na tem spletnem mestu so samo imena držav in njihove zastave z različnimi stranmi, tri strani pa bomo odstranili. Tri strani, na katerih bi delali, so:

http: // primer.spletanje.com / places / default / index / 0
http: // primer.spletanje.com / places / default / index / 1
http: // primer.spletanje.com / places / default / index / 2

Nazaj k našemu pajku bomo ustvarili sample_spider.py v imeniku pajkov. S terminala preprosto dotaknite se sample_spider.py ukaz bi pomagal ustvariti novo datoteko.

Po ustvarjanju datoteke bi jo zapolnili z naslednjimi vrsticami kode:

uvozno strganje
 
razred SampleSpider (strganje.Pajek):
name = "vzorec"
začetni_urli = [
"http: // primer.spletanje.com / places / default / index / 0 ",
"http: // primer.spletanje.com / places / default / index / 1 ",
"http: // primer.spletanje.com / places / default / index / 2 "
]
 
def parse (self, response):
stran_številka = odgovor.url.split ('/') [- 1]
file_name = "stran .html ".format (številka_strane)
z odprtim (ime_datoteke, 'wb') kot datoteka:
mapa.pisanje (odgovor.telo)

Na zgornji ravni imenika projekta zaženite naslednji ukaz:

vzorec plazenja

Spomnimo se, da smo dali svoje SampleSpider razred a ime atribut vzorec.

Po zagonu tega ukaza bi opazili, da so tri datoteke z imenom page0.html, stran1.html, stran2.html se shranijo v imenik.

Oglejmo si, kaj se zgodi s kodo:

uvozno strganje

Najprej knjižnico uvozimo v naš imenski prostor.

razred SampleSpider (strganje.Pajek):
name = "vzorec"

Nato ustvarimo razred pajkov, ki ga imenujemo SampleSpider. Naš pajek podeduje od strganje.pajek. Vsi naši pajki morajo podedovati po strganju.pajek. Po ustvarjanju razreda našemu pajku damo a ime atribut, to ime atribut se uporablja za priklic pajka s terminala. Če se spomnite, smo vodili vzorec plazenja ukaz za zagon naše kode.

začetni_urli = [
 
"http: // primer.spletanje.com / places / default / index / 0 ",
"http: // primer.spletanje.com / places / default / index / 1 ",
"http: // primer.spletanje.com / places / default / index / 2 "
]

Imamo tudi seznam url-ov za obisk pajka. Seznam mora biti poklican začetni_urli. Če želite seznamu dati drugo ime, bi morali določiti start_requests funkcija, ki nam daje nekaj več zmogljivosti. Če želite izvedeti več, si oglejte dokumentacijo za odstranjevanje.

Ne glede na to ne pozabite vključiti http: // ali https: // za svoje povezave, sicer bi se morali spoprijeti z manjkajočo napako sheme.

def parse (self, response):

Nato nadaljujemo z razglasitvijo funkcije razčlenjevanja in ji damo odzivni parameter. Ko se koda zažene, se sproži funkcija razčlenjevanja in pošlje odzivni objekt, ki vsebuje vse informacije o obiskani spletni strani.

stran_številka = odgovor.url.split ('/') [- 1]
file_name = "stran .html ".format (številka_strane)

S to kodo smo storili, da smo razdelili niz, ki vsebuje naslov, in samo številko strani shranili v stran_številka spremenljivka. Nato ustvarimo a Ime datoteke vstavitev spremenljivke stran_številka v nizu, ki bi bilo ime datoteke, ki bi jo ustvarjali.

z odprtim (ime_datoteke, 'wb') kot datoteka:
mapa.pisanje (odgovor.telo)

Zdaj smo datoteko ustvarili in vsebino spletne strani zapišemo v datoteko z uporabo telo atribut odziv predmet.

Naredimo lahko več kot le shranjevanje spletne strani. Knjižnico BeautifulSoup lahko uporabimo za razčlenitev datoteke telo.odziv. Če niste seznanjeni s knjižnico, si lahko ogledate to vadnico BeautiulSoup.

Tukaj je odlomek strani, ki jo je treba odstraniti, ki vsebuje podatke, ki jih potrebujemo:

Opazili boste, da so vsi potrebni podatki zaprti v oznakah div, zato bomo prepisali kodo, da bomo razčlenili html.
Tu je naš novi skript:

uvozno strganje
iz bs4 uvozi BeautifulSoup
 
razred SampleSpider (strganje.Pajek):
name = "vzorec"
 
začetni_urli = [
"http: // primer.spletanje.com / places / default / index / 0 ",
"http: // primer.spletanje.com / places / default / index / 1 ",
"http: // primer.spletanje.com / places / default / index / 2 "
]
 
def parse (self, response):
stran_številka = odgovor.url.split ('/') [- 1]
file_name = "stran .txt ".format (številka_strane)
z odprtim (ime_datoteke, 'w') kot datoteka:
html_content = BeautifulSoup (odgovor.telo, "lxml")
div_tags = html_content.najdi ("div", "id": "results")
country_tags = div_tags.find_all ("div")
country_name_position = zip (obseg (len (country_tags)), country_tags)
za položaj, ime države v položaju_ime_države:
mapa.write ("številka države : \ n".format (položaj + 1, ime_države.besedilo))

Koda je skoraj enaka začetni, vendar sem v naš imenski prostor dodal BeautifulSoup in spremenil logiko v funkciji razčlenjevanja.

Na hitro si oglejmo logiko.

def parse (self, response):

Tu smo definirali funkcijo razčlenjevanja in ji dali odzivni parameter.

stran_številka = odgovor.url.split ('/') [- 1]
file_name = "stran .txt ".format (številka_strane)
z odprtim (ime_datoteke, 'w') kot datoteka:

To počne enako kot je opisano v začetni kodi, edina razlika je v tem, da delamo z besedilno datoteko namesto html datoteke. Strgane podatke bi shranili v besedilno datoteko in ne celotne spletne vsebine v html kot že prej.

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

V tej vrstici kode smo poslali odziv.telo kot argument knjižnici BeautifulSoup in rezultate dodelil datoteki html_content spremenljivka.

div_tags = html_content.najdi ("div", "id": "results")

Če vzamemo html vsebino, jo tukaj razčlenimo tako, da poiščemo div oznaka, ki ima tudi in id atribut z rezultatov ker je vrednost, jo lahko shranimo v div_tags spremenljivka.

country_tags = div_tags.find_all ("div")

Ne pozabite, da so države obstajale leta div tudi oznake, zdaj preprosto dobimo vse div in jih shranite kot seznam v country_tags spremenljivka.

country_name_position = zip (obseg (len (country_tags)), country_tags)
 
za položaj, ime_države v položaju_ime_države:
mapa.write ("številka države : \ n".format (položaj + 1, ime_države.besedilo))

Tu pregledujemo položaj držav med vsemi oznakami držav, nato pa vsebino shranjujemo v besedilno datoteko.

Torej bi imeli v svoji besedilni datoteki nekaj takega:

država številka 1: Afganistan
država številka 2: Alandski otoki
država številka 3: Albanija
..

Zaključek

Scrapy je nedvomno ena najmočnejših knjižnic tam zunaj, je zelo hitra in v bistvu prenese spletno stran. Nato vam s spletno vsebino omogoči svobodo, kar koli želite.

Opozoriti moramo, da lahko Scrapy naredi veliko več, kot smo preverili tukaj. Če želite, lahko podatke razčlenite z izbirniki Scrapy CSS ali Xpath. Dokumentacijo lahko preberete, če želite narediti kaj bolj zapletenega.

Kako namestiti in igrati Doom v Linuxu
Uvod v Doom Serija Doom je nastala v devetdesetih letih po izidu prvotnega Dooma. Bil je takojšen hit in od takrat naprej je serija iger prejela števi...
Vulkan za uporabnike Linuxa
Z vsako novo generacijo grafičnih kart vidimo, da razvijalci iger premikajo meje grafične zvestobe in se približujejo fotorealizmu. A kljub vsem kredi...
OpenTTD vs Simutrans
Ustvarjanje lastne simulacije prevoza je lahko zabavno, sproščujoče in izjemno vabljivo. Zato morate preizkusiti čim več iger, da boste našli tisto, k...