Kuinka rakentaa perusindeksointi hakemaan tietoja verkkosivustolta

Kuinka rakentaa perusindeksointi hakemaan tietoja verkkosivustolta

Ohjelmilla, jotka lukevat tietoja verkkosivustoilta tai indeksointiroboteilta, on kaikenlaisia ​​hyödyllisiä sovelluksia. Voit hakea osaketietoja, urheilutuloksia, tekstiä Twitter -tililtä tai hakea hintoja ostosivustoilta.



Näiden indeksointiohjelmien kirjoittaminen on helpompaa kuin luulisi. Pythonilla on loistava kirjasto skriptien kirjoittamiseen, jotka poimivat tietoja verkkosivustoilta. Katsotaanpa, miten luodaan indeksointirobotti Scrapen avulla.





Scrapen asentaminen

Hoito on Python -kirjasto, joka on luotu raapimaan verkkoa ja rakentamaan indeksointirobotteja. Se on nopea, yksinkertainen ja voi selata useita verkkosivuja ilman paljon vaivaa.



Scrapia on saatavana Pip Installs Python (PIP) -kirjaston kautta, tässä on kertaus kuinka asentaa PIP Windows-, Mac- ja Linux -käyttöjärjestelmiin .

Python -virtuaaliympäristön käyttö on suositeltavaa, koska sen avulla voit asentaa Scrapian virtuaaliseen hakemistoon, joka jättää järjestelmätiedostot yksin. Scrapyn dokumentaatio suosittelee tämän tekemistä parhaiden tulosten saamiseksi.



Luo hakemisto ja alusta virtuaalinen ympäristö.

kuinka lisätä ääriviivat tekstiin Photoshopissa
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Voit nyt asentaa Scrapian tuohon hakemistoon käyttämällä PIP -komentoa.





pip install scrapy

Tarkista nopeasti, että Scrapy on asennettu oikein

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)
...

Web -indeksoijan luominen

Nyt kun ympäristö on valmis, voit aloittaa web -indeksoinnin rakentamisen. Poimitaan joitain tietoja Wikipedian paristosivulta: https://en.wikipedia.org/wiki/Battery_(electricity) .





Ensimmäinen askel indeksointirobotin kirjoittamiseen on määritellä Python -luokka, joka ulottuu Hämähäkki . Tämä antaa sinulle pääsyn kaikkiin Scrapyn toimintoihin ja ominaisuuksiin. Kutsutaan tätä luokkaa hämähäkki 1 .

Hämähäkkiluokka tarvitsee muutamia tietoja:

  • kohteeseen nimi hämähäkin tunnistamiseksi
  • kohteeseen start_urls muuttuja, joka sisältää luettelon indeksoitavista URL -osoitteista (Wikipedian URL -osoite on esimerkki tässä opetusohjelmassa)
  • kohteeseen jäsentää() menetelmä, jota käytetään verkkosivun käsittelyyn tietojen poimimiseksi
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Pikatesti varmistaaksesi, että kaikki toimii oikein.

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',
...

Kirjaamisen poistaminen käytöstä

Running Scrapy tällä luokalla tulostaa lokitietoja, jotka eivät auta sinua juuri nyt. Tehdään se yksinkertaiseksi poistamalla nämä ylimääräiset lokitiedot. Käytä Varoitus lisäämällä koodin tiedoston alkuun.

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

Kun suoritat komentosarjan uudelleen, lokitiedot eivät tulostu.

Chrome Inspectorin käyttäminen

Kaikki verkkosivulla olevat tiedot tallennetaan HTML -elementteihin. Elementit on järjestetty asiakirjaobjektimalliin (DOM). DOMin ymmärtäminen on ratkaisevan tärkeää, jotta saat kaiken hyödyn verkkoselaimesta. Verkkoindeksoija etsii tietoa kaikista sivun HTML -elementeistä löytääkseen tietoja, joten niiden järjestyksen tunteminen on tärkeää.

Google Chromessa on työkaluja, joiden avulla löydät HTML -elementit nopeammin. Voit etsiä minkä tahansa verkkosivulla näkyvän elementin HTML -koodin tarkastajan avulla.

  • Siirry sivulle Chromessa
  • Aseta hiiri sen elementin päälle, jota haluat tarkastella
  • Napsauta hiiren kakkospainikkeella ja valitse Tarkastaa valikosta

Nämä vaiheet avaavat kehittäjäkonsolin Elementit välilehti valittu. Konsolin alaosassa näet elementtipuun. Tästä puusta saat tietoa käsikirjoituksestasi.

Otsikon poimiminen

Saadaan käsikirjoitus tekemään työtä puolestamme; Yksinkertainen indeksointi Web -sivun otsikkotekstin saamiseksi.

Käynnistä komentosarja lisäämällä koodia jäsentää() menetelmä, joka poimii otsikon.

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

The vastaus argumentti tukee menetelmää nimeltä CSS () joka valitsee elementtejä sivulta antamasi sijainnin perusteella.

Tässä esimerkissä elementti on h1.firstHeading . Lisätään

::text

käsikirjoitus antaa elementin tekstisisällön. Lopuksi, ottaa talteen() menetelmä palauttaa valitun elementin.

Tämän komentosarjan suorittaminen Scrapessa tulostaa otsikon tekstimuodossa.

[u'Battery (electricity)']

Kuvauksen löytäminen

Nyt kun olemme kaavineet otsikkotekstin, tehdään enemmän käsikirjoituksella. Indeksoija etsii ensimmäisen kappaleen otsikon jälkeen ja poimii nämä tiedot.

Tässä on elementtipuu Chrome -kehittäjäkonsolissa:

Parhaat musiikintekosovellukset iPhonelle
div#mw-content-text>div>p

Oikea nuoli (>) osoittaa elementtien välisen vanhemman ja lapsen suhteen.

Tämä sijainti palauttaa kaikki s elementtejä, jotka sisältävät koko kuvauksen. Saadaksesi ensimmäisen s elementtiin voit kirjoittaa tämän koodin:

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

Aivan kuten otsikko, lisäät CSS -poimijan

::text

saadaksesi elementin tekstisisällön.

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

Lopullinen lauseke käyttää ottaa talteen() palauttaaksesi luettelon. Voit käyttää Pythonia liittyä seuraan() toiminto liittyäksesi luetteloon, kun kaikki indeksointi on valmis.

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

Tuloksena on tekstin ensimmäinen kappale!

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 -tietojen kerääminen

Scrapy voi poimia tietoja tekstimuodossa, mikä on hyödyllistä. Scrapen avulla voit tarkastella myös JavaScript -objektimerkintöjä (JSON). JSON on siisti tapa järjestää tietoa, ja sitä käytetään laajalti web -kehityksessä. JSON toimii hienosti Pythonin kanssa yhtä hyvin.

Kun haluat kerätä tietoja JSON -muodossa, voit käyttää saanto Scrapen sisäänrakennettu lausunto.

Tässä on komentosarjan uusi versio tuottoilmoituksen avulla. Sen sijaan, että saat ensimmäisen p -elementin tekstimuodossa, tämä nappaa kaikki p -elementit ja järjestää ne JSON -muodossa.

ruostumattomasta teräksestä valmistettu omenakello vs alumiini
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Voit nyt käyttää hämähäkkiä määrittämällä JSON -lähtötiedoston:

scrapy runspider spider3.py -o joe.json

Skripti tulostaa nyt kaikki p -elementit.

[
{'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
...

Kaapimalla useita elementtejä

Toistaiseksi indeksointirobotti on kaapinut sivulta otsikon ja eräänlaisen elementin. Scrapy voi myös poimia tietoja erityyppisistä elementeistä yhdessä skriptissä.

Poimitaan IMDb Box Office -hittien suosituimmat viikonloput. Tämä tieto on peräisin http://www.imdb.com/chart/boxoffice , taulukossa, jossa on rivit kullekin mittarille.

The jäsentää() menetelmä voi poimia useamman kuin yhden kentän riviltä. Chromen kehittäjätyökalujen avulla löydät taulukon sisällä olevat elementit.

...
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 kuva valitsin määrittää sen img on jälkeläinen td.posterColumn . Jos haluat purkaa oikean määritteen, käytä lauseketta | _+_ |.

Hämähäkin ajaminen palauttaa JSON:

::attr(src)

Lisää Web -kaapimia ja botteja

Scrapy on yksityiskohtainen kirjasto, joka voi tehdä melkein mitä tahansa Internetin indeksointia, jota pyydät. Kun on kyse tietojen löytämisestä HTML -elementeistä yhdessä Python -tuen kanssa, on vaikea voittaa. Riippumatta siitä, oletko rakentamassa web -indeksointirobottia tai opit web -kaapimisen perusteista, ainoa raja on se, kuinka paljon olet valmis oppimaan.

Jos etsit lisää tapoja rakentaa indeksointirobotteja tai robotteja, voit yrittää rakentaa Twitter- ja Instagram -robotteja Pythonin avulla . Python voi rakentaa hämmästyttäviä asioita verkkokehityksessä, joten kannattaa mennä pidemmälle kuin Internet -indeksointirobotit, kun tutkitaan tätä kieltä.

Jaa Jaa Tweet Sähköposti 15 Windowsin komentokehotteen (CMD) komentoa, jotka sinun on tiedettävä

Komentorivi on edelleen tehokas Windows -työkalu. Tässä ovat hyödyllisimmät CMD -komennot, jotka jokaisen Windows -käyttäjän on tiedettävä.

Lue seuraava
Liittyvät aiheet
  • Ohjelmointi
  • Verkkovastaavan työkalut
  • Ohjelmointi
  • Python
  • Koodausoppaat
  • Web -indeksoijat
Kirjailijasta Anthony Grant(40 artikkelia julkaistu)

Anthony Grant on freelance -kirjailija, joka kattaa ohjelmoinnin ja ohjelmistot. Hän on tietojenkäsittelytieteen pääopiskelija ohjelmoinnissa, Excelissä, ohjelmistoissa ja tekniikassa.

Lisää Anthony Grantilta

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi