Miks Scrapy?
Scrapy on jõuline veebikraapimisraamatukogu, mis võimaldab välklampide abil alla laadida veebilehti, pilte ja mis tahes andmeid, millele võiksite mõelda. Kiirusel on arvutamisel suur tähtsus ja Scrapy töötab selle nimel, külastades asünkroonselt veebisaite ja tehes palju tausttööd, mis muudab kogu ülesande lihtsaks.
Tuleb öelda, et Pythonil on ka teisi teeke, mida saab kasutada veebisaitidelt andmete kraapimiseks, kuid tõhususe osas pole ükski võrreldav Scrapyga.
Paigaldamine
Vaatame kiiresti, kuidas seda võimsat teeki teie arvutisse installida.
Nagu enamiku Pythoni teekide puhul, saate Scrapy installida ka mooduli pip abil:
pip installige sissekanneKas installimine õnnestus, saate importida Pythoni interaktiivsesse kesta sissekande.
$ pythonPython 3.5.2 (vaikimisi, 14. september 2017, 22:51:06)
[GCC 5.4.0 20160609] Linuxis
Lisateabe saamiseks sisestage „help“, „copyright“, „credits“ või „litsents“.
>>> impordi sissekanneNüüd, kui installimine on meil lõppenud, lähme asjade pähe.
Veebikraapimisprojekti loomine
Paigaldamise käigus lisati teekonnale tühjendusmärksõna, et saaksime seda märksõna kasutada otse käsurealt. Me kasutaksime seda kogu raamatukogu kasutamise ajal ära.
Valitud kataloogis käivitage järgmine käsk:
scrap startproject veebikaabitsSee looks kataloogi nimega veebikaabits praeguses kataloogis ja sissekandes.cfg-fail. Aastal veebikaabits kataloogis oleks __selles__.py, esemed.py, vaheseadmed.py, torujuhtmed.py, seaded.py failid ja kataloog nimega ämblikud.
Meie ämblikfailid i.e. skript, mis meie jaoks veebi kraapib, salvestatakse ämblikud kataloogi.
Meie ämbliku kirjutamine
Enne kui hakkame oma ämblikku kirjutama, on eeldatavasti juba teada, millist veebisaiti me kraapida tahame. Selle artikli jaoks kraapime veebikraapimise näidisveebi: http: // näide.veebi kraapimine.com.
Sellel veebisaidil on lihtsalt riikide nimed ja nende lipud, millel on erinevad lehed, ja me lammutame kolm lehte. Kolm lehte, millel töötaksime, on:
http: // näide.veebi kraapimine.com / Places / default / index / 0
http: // näide.veebi kraapimine.com / Places / default / index / 1
http: // näide.veebi kraapimine.com / Places / default / index / 2
Tagasi meie ämbliku juurde, loome spideri näidise.py ämblike kataloogis. Terminalist lihtne puudutage valimitämblik.py käsk aitaks luua uue faili.
Pärast faili loomist täidaksime selle järgmiste koodiridadega:
impordi sissekanneklass SampleSpider (romu.Ämblik):
nimi = "proov"
start_urls = [
"http: // näide.veebi kraapimine.com / places / default / index / 0 ",
"http: // näide.veebi kraapimine.com / places / default / index / 1 ",
"http: // näide.veebi kraapimine.com / places / default / index / 2 "
]
def parsimine (mina, vastus):
page_number = vastus.URL.poolitama ('/') [- 1]
faili_nimi = "leht .html ".vorming (lehenumber)
failina avatud (faili_nimi, 'wb'):
faili.kirjutama (vastus.keha)
Käivitage projekti kataloogi ülemisel tasandil järgmine käsk:
kraapitud indekseerimisproovTuletame meelde, et andsime oma SpiderSpider klass a nimi atribuut proov.
Pärast selle käsu käivitamist märkate, et kolm faili nimega page0.HTML, leht1.HTML, leht2.HTML salvestatakse kataloogi.
Vaatame, mis koodiga juhtub:
impordi sissekanneKõigepealt impordime raamatukogu oma nimeruumi.
klass SampleSpider (romu.Ämblik):nimi = "proov"
Seejärel loome ämblikuklassi, mida kutsume SpiderSpider. Meie ämblik pärib romu.Ämblik. Kõik meie ämblikud peavad vanarauast pärima.Ämblik. Pärast klassi loomist anname oma ämblikule a nimi atribuut, see nimi atribuuti kasutatakse ämbliku terminalist kutsumiseks. Kui te mäletate, siis me jooksime kraapitud indekseerimise proov käsk meie koodi käivitamiseks.
start_urls = ["http: // näide.veebi kraapimine.com / places / default / index / 0 ",
"http: // näide.veebi kraapimine.com / places / default / index / 1 ",
"http: // näide.veebi kraapimine.com / places / default / index / 2 "
]
Meil on ka ämbliku külastatavate URL-ide loend. Nimekiri tuleb kutsuda start_urls. Kui soovite anda loendile teise nime, peame määratlema a start_requests funktsioon, mis annab meile veel mõned võimalused. Lisateabe saamiseks vaadake vanaraua dokumentatsiooni.
Sõltumata sellest, ärge unustage lisada linkide jaoks ka http: // või https: //, muidu peate tegelema puuduva skeemiveaga.
def parsimine (mina, vastus):Seejärel kuulutame edasi sõelumisfunktsiooni ja anname sellele vastuse parameetri. Koodi käivitamisel käivitatakse parsimisfunktsioon ja saadetakse vastuse objekt, mis sisaldab kogu külastatud veebilehe teavet.
page_number = vastus.URL.poolitama ('/') [- 1]faili_nimi = "leht .html ".vorming (lehenumber)
Selle koodiga oleme teinud aadressi sisaldava stringi jagamise ja lehekülje numbri üksi salvestamise a-sse lehekülje number muutuv. Seejärel loome a faili nimi muutuja sisestamine lehekülje number stringis, mis oleks meie loodavate failide failinimi.
failina avatud (faili_nimi, 'wb'):faili.kirjutama (vastus.keha)
Nüüd oleme faili loonud ja kirjutame veebilehe sisu faili, kasutades keha atribuut vastus objekt.
Saame teha enamat kui lihtsalt veebilehe salvestamine. BeautifulSoupi teeki saab kasutada keha.vastus. Kui te pole raamatukoguga tuttav, saate tutvuda selle BeautiulSoupi õpetusega.
Vanaraualt eemaldamiseks on siin väljavõte HTML-ist, mis sisaldab vajalikke andmeid:
Te märkate, et kõik vajalikud andmed on ümbritsetud div-siltidega, nii et kirjutame koodi HTML-i sõelumiseks ümber.
Siin on meie uus skript:
bs4-st importige BeautifulSoup
klass SampleSpider (romu.Ämblik):
nimi = "proov"
start_urls = [
"http: // näide.veebi kraapimine.com / places / default / index / 0 ",
"http: // näide.veebi kraapimine.com / places / default / index / 1 ",
"http: // näide.veebi kraapimine.com / places / default / index / 2 "
]
def parsimine (mina, vastus):
page_number = vastus.URL.poolitama ('/') [- 1]
faili_nimi = "leht .txt ".vorming (lehenumber)
failina avatud (faili_nimi, 'w'):
html_content = BeautifulSoup (vastus.keha, "lxml")
div_tags = html_content.leidmine ("div", "id": "results")
country_tags = div_tags.find_all ("div")
riigi_nimi_positsioon = zip (vahemik (len (riigi_märgised)), riigi_märgised)
positsiooni jaoks riigi_nimi asukohariigi_nimi_koht:
faili.kirjuta ("riigi number : \ n".formaat (positsioon + 1, riigi_nimi.tekst))
Kood on üsna sama, mis algne, kuid olen meie nimeruumi lisanud BeautifulSoupi ja muutnud parsimisfunktsiooni loogikat.
Vaatame loogika kiirelt üle.
def parsimine (mina, vastus):Siin on määratletud sõelumisfunktsioon ja antud sellele vastuseparameeter.
page_number = vastus.URL.poolitama ('/') [- 1]faili_nimi = "leht .txt ".vorming (lehenumber)
failina avatud (faili_nimi, 'w'):
See teeb sama, mida arutati sisekoodis, ainus erinevus on see, et töötame HTML-faili asemel tekstifailiga. Salvestaksime kraapitud andmed tekstifaili, mitte kogu veebisisu HTML-is, nagu varem tehtud.
html_content = BeautifulSoup (vastus.keha, "lxml")Selle koodireaga oleme saatnud vastus.keha argumendina BeautifulSoupi teegile ja määras tulemused html_content muutuv.
div_tags = html_content.leidmine ("div", "id": "results")HTML-i sisu analüüsides analüüsime seda siin, otsides a div silt, millel on ka ja id atribuut koos tulemused kuna see on väärtus, siis saame selle a-sse salvestada div_tags muutuv.
country_tags = div_tags.find_all ("div")Pidage meeles, et riigid olid olemas div ka sildid, nüüd saame lihtsalt kõik div siltide salvestamine loendisse country_tags muutuv.
riigi_nimi_positsioon = zip (vahemik (len (riigi_märgised)), riigi_märgised)positsiooni jaoks riigi_nimi asukohariigi_nimi_koht:
faili.kirjuta ("riiginumber : \ n".formaat (positsioon + 1, riigi_nimi.tekst))
Siin kordame riikide positsiooni kõigi riigimärgendite vahel, seejärel salvestame sisu tekstifaili.
Nii et teie tekstifailis oleks midagi sellist:
riik number 1: Afganistanriigi number 2: Alandsaared
riigi number 3: Albaania
…
Järeldus
Scrapy on kahtlemata üks võimsamaid raamatukogusid seal, see on väga kiire ja laadib põhimõtteliselt alla veebilehe. Seejärel annab see teile veebisisu abil vabaduse kõigele, mida soovite.
Peaksime märkima, et Scrapy suudab palju rohkem, kui oleme siin kontrollinud. Soovi korral saate andmeid sõeluda Scrapy CSS või Xpath valijatega. Kui peate tegema midagi keerulisemat, võite dokumentatsiooni lugeda.