Kaip sukurti pagrindinį žiniatinklio tikrintuvą, kad būtų galima ištraukti informaciją iš svetainės

Kaip sukurti pagrindinį žiniatinklio tikrintuvą, kad būtų galima ištraukti informaciją iš svetainės

Programos, kurios skaito informaciją iš svetainių arba žiniatinklio tikrinimo programos, turi visų rūšių naudingų programų. Galite ieškoti informacijos apie akcijas, sporto rezultatus, tekstą iš „Twitter“ paskyros arba gauti kainas iš parduotuvių svetainių.





Parašyti šias žiniatinklio tikrinimo programas yra lengviau, nei manote. „Python“ turi puikią biblioteką, skirtą rašyti scenarijus, išgaunančius informaciją iš svetainių. Pažiūrėkime, kaip sukurti žiniatinklio tikrintuvą naudojant „Scrapy“.





„Scrapy“ diegimas

Scrapija yra „Python“ biblioteka, sukurta norint nuskaityti žiniatinklį ir kurti žiniatinklio tikrinimo priemones. Tai greita, paprasta ir gali naršyti po kelis tinklalapius be didelių pastangų.





„Scrap“ galima gauti per „Pip Installs Python“ (PIP) biblioteką, čia yra atnaujinimas kaip įdiegti PIP „Windows“, „Mac“ ir „Linux“ .

Pageidautina naudoti „Python“ virtualią aplinką, nes tai leis įdiegti „Scrapy“ virtualiame kataloge, kuriame sistemos failai paliekami vieni. „Scrapy“ dokumentacija rekomenduoja tai padaryti, kad gautumėte geriausius rezultatus.



Sukurkite katalogą ir inicijuokite virtualią aplinką.

ką reiškia šis jaustukas?
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Dabar galite įdiegti „Scrapy“ į tą katalogą naudodami PIP komandą.





pip install scrapy

Greitas patikrinimas, kad įsitikintumėte, jog „Scrapy“ tinkamai įdiegtas

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Kaip sukurti žiniatinklio tikrintuvą

Dabar, kai aplinka yra paruošta, galite pradėti kurti žiniatinklio tikrintuvą. Paimkime šiek tiek informacijos iš „Wikipedia“ puslapio apie baterijas: https://en.wikipedia.org/wiki/Battery_(electricity) .





Pirmasis žingsnis rašant tikrintuvą yra „Python“ klasės, kuri tęsiasi nuo Scrapija. Voras . Tai suteikia jums prieigą prie visų „Scrapy“ funkcijų ir funkcijų. Pavadinkime šią klasę voras1 .

Vorų klasei reikia kelių informacijos dalių:

  • į vardas norint atpažinti vorą
  • į start_urls kintamasis, kuriame yra URL, iš kurių reikia tikrinti, sąrašas („Wikipedia“ URL bus šios mokymo priemonės pavyzdys)
  • į analizuoti () metodas, naudojamas tinklalapiui apdoroti, norint išgauti informaciją
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Greitas testas, siekiant įsitikinti, kad viskas veikia tinkamai.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Registravimo išjungimas

„Vykdant terapiją“ su šia klase spausdinama žurnalo informacija, kuri jums dabar nepadės. Padarykime tai paprasta pašalindami šią žurnalo informacijos perteklių. Naudoti įspėjimas teiginį, pridedant kodą prie failo pradžios.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Dabar, kai paleisite scenarijų dar kartą, žurnalo informacija nebus išspausdinta.

Naudojant „Chrome Inspector“

Viskas tinklalapyje saugoma HTML elementuose. Elementai išdėstyti dokumento objekto modelyje (DOM). Norint kuo geriau išnaudoti žiniatinklio tikrinimo programą, labai svarbu suprasti DOM. Žiniatinklio tikrinimo programa ieško visų puslapio HTML elementų, kad surastų informacijos, todėl svarbu žinoti, kaip jie išdėstyti.

„Google Chrome“ yra įrankių, kurie padeda greičiau rasti HTML elementus. Naudodami inspektorių, galite rasti bet kurio tinklalapyje matomo elemento HTML.

  • Eikite į puslapį „Chrome“
  • Užveskite pelę ant elemento, kurį norite peržiūrėti
  • Dešiniuoju pelės mygtuku spustelėkite ir pasirinkite Patikrinkite iš meniu

Šie veiksmai atvers kūrėjo konsolę su Elementai pasirinktas skirtukas. Konsolės apačioje pamatysite elementų medį. Šis medis yra tai, kaip gausite informaciją apie savo scenarijų.

Pavadinimo ištraukimas

Leiskite scenarijui atlikti tam tikrą darbą už mus; Paprastas tikrinimas, norint gauti tinklalapio pavadinimo tekstą.

Pradėkite scenarijų pridėdami kodą prie analizuoti () metodas, kuris ištraukia pavadinimą.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

The atsakymas argumentas palaiko metodą, vadinamą CSS () kuri pasirenka elementus iš puslapio, naudodami jūsų nurodytą vietą.

Šiame pavyzdyje elementas yra h1.firstHeading . Pridedant

::text

prie scenarijaus suteikia jums elemento tekstinį turinį. Galiausiai, ištrauka () Metodas grąžina pasirinktą elementą.

Paleidus šį scenarijų „Scrapy“, pavadinimas spausdinamas teksto forma.

[u'Battery (electricity)']

Aprašymo radimas

Dabar, kai nukopijavome pavadinimo tekstą, padarykime daugiau scenarijaus. Tikrintuvas suras pirmąją pastraipą po pavadinimo ir ištrauks šią informaciją.

Štai elementų medis „Chrome“ kūrėjų pulte:

kur nusipirkti pigių vaizdo žaidimų
div#mw-content-text>div>p

Dešinė rodyklė (>) rodo tėvų ir vaikų santykį tarp elementų.

Ši vieta grąžins visus p elementai, kurie apima visą aprašymą. Norėdami gauti pirmąjį p elementą galite parašyti šį kodą:

response.css('div#mw-content-text>div>p')[0]

Kaip ir pavadinimą, pridedate CSS ištraukiklį

::text

kad gautumėte elemento tekstinį turinį.

response.css('div#mw-content-text>div>p')[0].css('::text')

Galutinė išraiška naudojama ištrauka () grąžinti sąrašą. Galite naudoti „Python“ prisijungti () funkcija prisijungti prie sąrašo, kai tikrinimas bus baigtas.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

Rezultatas - pirmoji teksto pastraipa!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

JSON duomenų rinkimas

Scrapija gali išgauti informaciją teksto forma, o tai yra naudinga. „Scrapy“ taip pat leidžia peržiūrėti duomenis „JavaScript Object Notation“ (JSON). JSON yra tvarkingas informacijos tvarkymo būdas ir yra plačiai naudojamas kuriant žiniatinklį. JSON gana gerai dirba su „Python“ taip pat.

Kai reikia rinkti duomenis kaip JSON, galite naudoti derlius „Scrapy“ integruotas teiginys.

Čia yra nauja scenarijaus versija, naudojant derlingumo ataskaitą. Užuot gavęs pirmąjį p elementą teksto formatu, jis sugriebs visus p elementus ir sutvarkys jį JSON formatu.

kiek galite uždirbti bitkoinų kasybos
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Dabar galite paleisti voratinklį nurodydami išvesties JSON failą:

scrapy runspider spider3.py -o joe.json

Dabar scenarijus išspausdins visus p elementus.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Nubraukite kelis elementus

Iki šiol žiniatinklio tikrinimo priemonė iš puslapio iškrapštė pavadinimą ir vienos rūšies elementą. „Scrapy“ taip pat gali išgauti informaciją iš skirtingų tipų elementų viename scenarijuje.

Savaitgalį išgaukime geriausius „IMDb Box Office“ hitus. Ši informacija yra paimta iš http://www.imdb.com/chart/boxoffice , lentelėje su kiekvienos metrikos eilutėmis.

The analizuoti () metodas iš eilės gali išgauti daugiau nei vieną lauką. Naudodami „Chrome“ kūrėjo įrankius galite rasti lentelėje įterptus elementus.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

The įvaizdį selektorius tai nurodo img yra palikuonis td.posterColumn . Norėdami išgauti tinkamą atributą, naudokite išraišką | _+_ |.

Vykdant vorą grįžta JSON:

::attr(src)

Daugiau žiniatinklio grandiklių ir robotų

„Scrapy“ yra išsami biblioteka, galinti atlikti beveik bet kokį žiniatinklio tikrinimą, kurio prašote. Kalbant apie informacijos paiešką HTML elementuose, kartu su „Python“ palaikymu, sunku įveikti. Nesvarbu, ar kuriate žiniatinklio tikrintuvą, ar mokotės žiniatinklio grandymo pagrindų, vienintelė riba yra tai, kiek norite mokytis.

Jei ieškote daugiau būdų, kaip sukurti tikrintuvus ar robotus, galite pabandyti kurti „Twitter“ ir „Instagram“ robotus naudojant „Python“ . „Python“ gali sukurti nuostabių dalykų kuriant žiniatinklį, todėl tiriant šią kalbą verta neapsiriboti žiniatinklio tikrinimo priemonėmis.

Dalintis Dalintis „Tweet“ Paštu 15 „Windows“ komandų eilutės (CMD) komandų, kurias turite žinoti

Komandų eilutė vis dar yra galingas „Windows“ įrankis. Čia yra naudingiausios CMD komandos, kurias turi žinoti kiekvienas „Windows“ vartotojas.

Skaityti toliau
Susijusios temos
  • Programavimas
  • Žiniatinklio valdytojo įrankiai
  • Programavimas
  • Python
  • Kodavimo pamokos
  • Interneto tikrintuvai
Apie autorių Anthony Grantas(Paskelbti 40 straipsnių)

Anthony Grantas yra laisvai samdomas rašytojas, apimantis programavimą ir programinę įrangą. Jis yra informatikos specialistas, besisukantis programavimo, „Excel“, programinės įrangos ir technologijų srityse.

Daugiau iš Anthony Grant

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia