Laužas

Žiniatinklio grandymas naudojant „Python“ laužymo modulį

Žiniatinklio grandymas naudojant „Python“ laužymo modulį
Žiniatinklio grandymo įgūdžiai šiandien tapo auksiniai, todėl sužinokime, kaip galime gauti reikalingus duomenis iš tinklalapių. Šiame straipsnyje mes kalbėtume apie „Scrapy Python“ biblioteką, ką ji gali padaryti ir kaip ją naudoti. Pradėkime.

Kodėl laužas?

„Scrapy“ yra patikima žiniatinklio grandymo biblioteka, suteikianti galimybę žaibiškai atsisiųsti tinklalapius, vaizdus ir bet kokius duomenis, apie kuriuos galite pagalvoti. Greitis yra labai svarbus skaičiuojant, o „Scrapy“ šiuo klausimu dirba asinchroniškai lankydamasis svetainėse ir atlikdamas daug foninio darbo, kad visa užduotis atrodytų lengvai.

Reikėtų pasakyti, kad „Python“ turi kitų bibliotekų, kurios gali būti naudojamos duomenims nuskaityti iš svetainių, tačiau nė viena nėra panaši į „Scrapy“, kai kalbama apie efektyvumą.

Montavimas

Pažvelkime greitai, kaip šią galingą biblioteką galima įdiegti jūsų kompiuteryje.

Kaip ir daugumoje „Python“ bibliotekų, „Scrapy“ galite įdiegti naudodami „pip“ modulį:

pip įdiegti laužas

Galite patikrinti, ar diegimas buvo sėkmingas, importuodami iškarpas į interaktyvų „Python“ apvalkalą.

$ python
„Python 3“.5.2 (numatytasis, 2017 m. Rugsėjo 14 d., 22:51:06)
[PĮB 5.4.0 20160609] „Linux“

Norėdami gauti daugiau informacijos, įveskite „pagalba“, „autorių teisės“, „kreditai“ arba „licencija“.

>>> importuoti laužą

Dabar, kai baigsime diegimą, įsigilinkime į reikalus.

Interneto grandymo projekto kūrimas

Diegiant raktinis žodis buvo pridėtas prie kelio, kad raktinį žodį galėtume naudoti tiesiai iš komandinės eilutės. Mes tuo pasinaudotume visą bibliotekos naudojimo laiką.

Iš pasirinkto katalogo vykdykite šią komandą:

„scrapy startproject webscraper“

Tai sukurtų katalogą, vadinamą tinklaraštis dabartiniame kataloge ir iškarpose.CFG failas. Viduje konors tinklaraštis  kataloge __init__.py, daiktai.py, tarpinės.py, vamzdynai.py, nustatymai.py failus ir katalogą vorai.

Mūsų voro failai i.e. scenarijus, kuris mums užrašo žiniatinklį, būtų saugomas vorai kataloge.

Rašome mūsų vorą

Tikimasi, kad prieš rašydami savo vorą jau žinome, kurią svetainę norime nukopijuoti. Šio straipsnio tikslais mes nuimame žiniatinklio grandymo svetainės pavyzdį: http: // pavyzdys.žiniatinklio grandymas.com.

Šioje svetainėje yra tik šalių pavadinimai ir jų vėliavos su skirtingais puslapiais, o mes ketiname atsisakyti trijų puslapių. Trys puslapiai, kuriuos dirbtume, yra šie:

http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 0
http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 1
http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 2

Grįžtant prie mūsų voro, mes sukursime voro pavyzdį.py vorų kataloge. Iš terminalo paprasta palieskite pavyzdį_voras.py komanda padėtų sukurti naują failą.

Sukūrę failą, jį užpildysime šiomis kodo eilutėmis:

importuoti laužą
 
klasė „SampleSpider“ (laužas.Voras):
pavadinimas = "pavyzdys"
start_urls = [
"http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 0 ",
"http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 1 ",
"http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 2 "
]
 
def analizuoti (savęs, atsako):
page_number = atsakymas.URL.padalinti ('/') [- 1]
file_name = "puslapis .html ".formatas (puslapio_ numeris)
su atidarytu (file_name, 'wb') kaip failą:
failą.rašyti (atsakymas.kūnas)

Viršutiniame projekto katalogo lygyje vykdykite šią komandą:

metalo nuskaitymo mėginys

Prisiminkime, kad davėme savo „SampleSpider“ a klasė vardas atributas pavyzdys.

Paleidę šią komandą pastebėsite, kad trys failai pavadinti page0.HTML, 1 puslapis.HTML, 2 puslapis.html įrašomi į katalogą.

Pažvelkime, kas vyksta su kodu:

importuoti laužą

Pirmiausia biblioteką importuojame į savo vardų sritį.

klasė „SampleSpider“ (laužas.Voras):
pavadinimas = "pavyzdys"

Tada mes sukuriame vorų klasę, kurią mes vadiname „SampleSpider“. Mūsų voras paveldi iš laužas.Voras. Visi mūsų vorai turi paveldėti iš laužo.Voras. Sukūrę klasę, mes suteikiame savo vorui a vardas atributas, tai vardas atributas naudojamas vorui iškviesti iš terminalo. Jei pamenate, mes paleidome metalo nuskaitymo mėginys komanda paleisti mūsų kodą.

start_urls = [
 
"http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 0 ",
"http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 1 ",
"http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 2 "
]

Mes taip pat turime URL, kuriuos voras turi aplankyti, sąrašą. Sąrašas turi būti iškviestas start_urls. Jei norite sąrašui suteikti kitą pavadinimą, turėtume apibrėžti pradžios_prašymai funkcija, kuri suteikia mums dar keletą galimybių. Norėdami sužinoti daugiau, galite peržiūrėti metalo laužo dokumentaciją.

Nepaisant to, nepamirškite įtraukti nuorodų http: // arba https: //, jei nenurodysite schemos klaidos.

def analizuoti (savęs, atsako):

Tada mes einame deklaruoti analizės funkcijos ir suteikti jai atsako parametrą. Paleidus kodą, iškviečiama analizės funkcija ir išsiunčiamas atsakymo objektas, kuriame yra visa aplankyto tinklalapio informacija.

page_number = atsakymas.URL.padalinti ('/') [- 1]
file_name = "puslapis .html ".formatas (puslapio_ numeris)

Tai, ką mes padarėme naudodami šį kodą, yra padalinti eilutę, kurioje yra adresas, ir išsaugoti tik puslapio numerį a puslapio numeris kintamasis. Tada mes sukuriame a failo pavadinimas kintamasis įterpiant puslapio numeris eilutėje, kuri būtų mūsų sukurtų failų pavadinimas.

su atidarytu (file_name, 'wb') kaip failą:
failą.rašyti (atsakymas.kūnas)

Dabar sukūrėme failą ir tinklalapio turinį įrašome į failą naudodami kūnas atributas atsakymą objektas.

Mes galime ne tik išsaugoti internetinį puslapį. Biblioteka gali būti naudojama analizuojant kūnas.atsakymą. Galite sužinoti šią „BeautiulSoup“ mokymo programą, jei nesate susipažinę su biblioteka.

Iš puslapio, kurį norite atsisakyti, pateikiame HTML ištrauką, kurioje yra mums reikalingi duomenys:

Jūs pastebėjote, kad visi reikalingi duomenys yra įdėti į „div“ žymas, todėl mes perrašysime kodą, kad išanalizuotume html.
Štai mūsų naujas scenarijus:

importuoti laužą
iš bs4 importuoti BeautifulSoup
 
klasė „SampleSpider“ (laužas.Voras):
pavadinimas = "pavyzdys"
 
start_urls = [
"http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 0 ",
"http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 1 ",
"http: // pavyzdys.žiniatinklio grandymas.com / places / default / index / 2 "
]
 
def analizuoti (savęs, atsako):
page_number = atsakymas.URL.padalinti ('/') [- 1]
file_name = "puslapis .txt ".formatas (puslapio_ numeris)
su atidarytu (file_name, 'w') kaip failą:
html_content = BeautifulSoup (atsakymas.turinys, „lxml“)
div_tags = html_content.rasti ("div", "id": "rezultatai")
country_tags = div_tags.find_all ("div")
country_name_position = zip (diapazonas (len (country_tags)), country_tags)
už poziciją, šalies_pavadinimas šalies_pavadinimas_pozicijoje:
failą.rašyti ("šalies numeris : \ n".formatas (pozicija + 1, šalies_vardas.tekstas))

Kodas yra beveik toks pat kaip pradinis, tačiau aš pridėjau „BeautifulSoup“ prie mūsų vardų srities ir pakeičiau logikos analizės funkciją.

Greitai pažvelkime į logiką.

def analizuoti (savęs, atsako):

Čia mes apibrėžėme analizės funkciją ir suteikėme jai atsako parametrą.

page_number = atsakymas.URL.padalinti ('/') [- 1]
file_name = "puslapis .txt ".formatas (puslapio_ numeris)
su atidarytu (file_name, 'w') kaip failą:

Tai daro tą patį, kas aptarta vidiniame kode, vienintelis skirtumas yra tas, kad mes dirbame su tekstiniu failu, o ne su HTML failu. Nuskaitytus duomenis išsaugosime tekstiniame faile, o ne visą žiniatinklio turinį HTML formatu, kaip tai buvo padaryta anksčiau.

html_content = BeautifulSoup (atsakymas.turinys, „lxml“)

Tai, ką mes padarėme šioje kodo eilutėje, yra siųsti atsakymą.kūnas kaip argumentą „BeautifulSoup“ bibliotekai ir priskyrė rezultatus html_content kintamasis.

div_tags = html_content.rasti ("div", "id": "rezultatai")

Atsižvelgdami į html turinį, mes jį čia analizuojame ieškodami div žyma, kuri taip pat turi ir id atributas su rezultatus nes tai vertė, tada mes turime ją išsaugoti div_tags kintamasis.

country_tags = div_tags.find_all („div“)

Atminkite, kad šalys egzistavo div taip pat dabar tiesiog gauname visas div žymos ir išsaugomos kaip sąrašas country_tags kintamasis.

country_name_position = zip (diapazonas (len (country_tags)), country_tags)
 
už poziciją, šalies_pavadinimas šalies_pavadinimas_pozicijoje:
failą.rašyti ("šalies numeris : \ n".formatas (pozicija + 1, šalies_vardas.tekstas))

Čia kartojame šalių pozicijas tarp visų šalių žymių, tada įrašome turinį teksto faile.

Taigi savo tekstiniame faile turėtumėte kažką panašaus:

šalies numeris 1: Afganistanas
šalies numeris 2: Alandų salos
šalies numeris 3: Albanija

Išvada

Scrapy yra neabejotinai viena iš galingiausių bibliotekų, ji yra labai greita ir iš esmės atsisiunčia tinklalapį. Tada jis suteikia jums laisvę viskam, ko norite, naudodamiesi interneto turiniu.

Turėtume atkreipti dėmesį į tai, kad laužymas gali padaryti daug daugiau, nei mes čia patikrinome. Jei norite, galite analizuoti duomenis naudodami „Scrapy CSS“ arba „Xpath“ selektorius. Galite perskaityti dokumentus, jei jums reikia padaryti ką nors sudėtingesnio.

Kaip padidinti FPS sistemoje „Linux“?
FPS reiškia Kadrai per sekundę. FPS užduotis yra išmatuoti kadrų greitį atkuriant vaizdo įrašus ar žaidimus. Paprastais žodžiais, nepertraukiamų viso ...
Populiariausi „Oculus App Lab“ žaidimai
Jei esate „Oculus“ laisvų rankų įrangos savininkas, turite žinoti, kaip krauti iš šono. Šoninis įkėlimas yra ne parduotuvėje esančio turinio įdiegimas...
10 geriausių žaidimų, kuriuos reikia žaisti naudojant „Ubuntu“
„Windows“ platforma buvo viena iš dominuojančių žaidimų platformų dėl didžiulio procento žaidimų, kurie šiandien kuriami natūraliai palaikant „Windows...