Vanametalli

Veebikraapimine Pythoni sissepritse mooduliga

Veebikraapimine Pythoni sissepritse mooduliga
Veebikraapimise oskus on tänapäeval muutunud kuldseks, nii et õppigem, kuidas saaksime veebilehtedelt vajalikke andmeid. Selles artiklis räägime Scrapy Pythoni teegist, sellest, mida ta saab teha ja kuidas seda kasutada. Alustame.

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 sissekanne

Kas installimine õnnestus, saate importida Pythoni interaktiivsesse kesta sissekande.

$ python
Python 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 sissekanne

Nüü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 veebikaabits

See 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 sissekanne
 
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 .html ".vorming (lehenumber)
failina avatud (faili_nimi, 'wb'):
faili.kirjutama (vastus.keha)

Käivitage projekti kataloogi ülemisel tasandil järgmine käsk:

kraapitud indekseerimisproov

Tuletame 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 sissekanne

Kõ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:

impordi sissekanne
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: Afganistan
riigi 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.

Kuidas muuta hiire ja puuteplaatide kerimise suund Windows 10-s ümber
Hiir ja PuuteplaatNeed muudavad arvutamise mitte ainult lihtsaks, vaid ka tõhusamaks ja vähem aeganõudvaks. Me ei kujuta ette elu ilma nende seadmetet...
Kuidas muuta hiirekursori ja kursori suurust, värvi ja skeemi Windows 10-s
Windows 10 hiirekursor ja kursor on operatsioonisüsteemi väga olulised aspektid. Seda võib öelda ka teiste opsüsteemide kohta, nii et tegelikult pole ...
Tasuta ja avatud lähtekoodiga mängumootorid Linuxi mängude arendamiseks
See artikkel hõlmab loetelu tasuta ja avatud lähtekoodiga mängumootoritest, mida saab kasutada 2D- ja 3D-mängude arendamiseks Linuxis. Selliseid mängu...