Kuidas luua põhiline veebirobot, et veebisaidilt teavet hankida

Kuidas luua põhiline veebirobot, et veebisaidilt teavet hankida

Programmidel, mis loevad veebisaitidelt teavet või veebirobotitel, on igasuguseid kasulikke rakendusi. Aktsiateavet, sporditulemusi, Twitteri kontolt saadetud teksti või ostude veebisaitidelt hindu saate otsida.





Nende veebipõhiste indekseerimisprogrammide kirjutamine on lihtsam kui arvate. Pythonil on suurepärane raamatukogu veebisaitidelt teavet ammutavate skriptide kirjutamiseks. Vaatame, kuidas Scrapi abil veebirobotit luua.





Scrapi installimine

Teraapia on Pythoni raamatukogu, mis loodi veebi kraapimiseks ja veebipõhiste indekseerijate loomiseks. See on kiire, lihtne ja suudab liikuda mitmel veebilehel ilma palju vaeva nägemata.





Teraapia on saadaval Pip Installs Pythoni (PIP) raamatukogu kaudu, siin on värskendus kuidas installida PIP Windowsi, Maci ja Linuxi jaoks .

Eelistatud on Pythoni virtuaalse keskkonna kasutamine, kuna see võimaldab teil installida Scrapy virtuaalsesse kataloogi, mis jätab teie süsteemifailid üksi. Scrapy dokumentatsioon soovitab seda teha parima tulemuse saamiseks.



Looge kataloog ja lähtestage virtuaalne keskkond.

kuidas avada psd -faile ilma Photoshopita
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Nüüd saate Scrapi sellesse kataloogi installida, kasutades käsku PIP.





pip install scrapy

Kiire kontroll, et veenduda, kas Scrapy on õigesti installitud

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

Kuidas veebirobotit luua

Nüüd, kui keskkond on valmis, võite hakata veebirobotit ehitama. Võtame akude kohta Vikipeedia lehelt teavet: https://en.wikipedia.org/wiki/Battery_(electricity) .





Esimene samm indekseerimise kirjutamiseks on Python -klassi määratlemine, mis ulatub Teraapia. Ämblik . See annab teile juurdepääsu kõigile Scrapy funktsioonidele ja funktsioonidele. Nimetagem seda klassi ämblik 1 .

Ämblikuklass vajab paar teavet:

  • et nimi ämbliku tuvastamiseks
  • et start_urls muutuja, mis sisaldab indekseeritavate URL -ide loendit (Vikipeedia URL on selle õpetuse näide)
  • et sõeluma () meetod, mida kasutatakse veebilehe töötlemiseks teabe hankimiseks
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Kiire test veendumaks, et kõik töötab korralikult.

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

Logimise väljalülitamine

Running Scrapy selle klassiga prindib logiteavet, mis teid praegu ei aita. Lihtsustame selle liigse logiteabe eemaldamise. Kasuta hoiatus avaldus, lisades faili algusesse koodi.

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

Nüüd, kui skripti uuesti käivitate, logiteavet ei prindita.

Chrome'i inspektori kasutamine

Kõik veebilehel olevad andmed salvestatakse HTML -elementidesse. Elemendid on paigutatud dokumendi objekti mudelisse (DOM). DOM -i mõistmine on kriitilise tähtsusega, et veebirobotist maksimaalselt kasu saada. Veebironija otsib teabe leidmiseks läbi kõik lehe HTML -elemendid, seega on oluline teada, kuidas need on paigutatud.

Google Chrome'is on tööriistu, mis aitavad teil HTML -elemente kiiremini leida. Inspektori abil saate leida mis tahes veebilehel kuvatava elemendi HTML -i.

  • Liikuge Chrome'i lehele
  • Asetage hiir elemendile, mida soovite vaadata
  • Paremklõpsake ja valige Kontrollige menüüst

Need toimingud avavad arendajakonsooli nupuga Elemendid sakk valitud. Konsooli allosas näete elementide puud. Selle puu abil saate teavet oma skripti kohta.

Pealkirja väljavõtmine

Laske skriptil meie heaks tööd teha; Lihtne indekseerimine veebilehe pealkirja teksti saamiseks.

Käivitage skript, lisades sõeluma () pealkirja väljavõtte meetod.

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

The vastus argument toetab meetodit nimega CSS () mis valib lehelt elemendid, kasutades teie antud asukohta.

Selles näites on element h1.firstHeading . Lisamine

::text

skripti jaoks annab see elemendi teksti sisu. Lõpuks, ekstrakt () meetod tagastab valitud elemendi.

Selle skripti käitamine Scrapy -s prindib pealkirja teksti kujul.

[u'Battery (electricity)']

Kirjelduse leidmine

Nüüd, kui oleme pealkirja teksti kraapinud, teeme skriptiga rohkem. Roomaja otsib pealkirja järel esimese lõigu ja võtab selle teabe välja.

Siin on elementide puu Chrome'i arendajakonsoolis:

parimad saidid tasuta filmide vaatamiseks
div#mw-content-text>div>p

Paremnool (>) näitab elementide vahelist vanema ja lapse suhet.

See asukoht tagastab kõik lk elemendid sobitatud, mis sisaldab kogu kirjeldust. Esimese saamiseks lk elemendile saate kirjutada selle koodi:

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

Nagu pealkiri, lisate ka CSS -i ekstraheerija

::text

et saada elemendi tekstisisu.

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

Viimane väljend kasutab ekstrakt () nimekirja tagastamiseks. Võite kasutada Pythoni liitu () funktsioon, et liituda loendiga, kui kõik indekseerimine on lõpule viidud.

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

Tulemuseks on teksti esimene lõik!

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

JSONi andmete kogumine

Teraapia abil saab teavet saada tekstivormis, mis on kasulik. Scrapy võimaldab teil vaadata ka JavaScripti objektimärgistust (JSON). JSON on puhas viis teabe korraldamiseks ja seda kasutatakse laialdaselt veebiarenduses. JSON töötab Pythoniga päris kenasti samuti.

Kui teil on vaja andmeid koguda JSON -vormingus, saate kasutada saagikus Scrapisse sisseehitatud avaldus.

Siin on skripti uus versioon, mis kasutab tootlust. Selle asemel, et saada esimene p -element tekstivormingus, haarab see kõik p -elemendid ja korraldab selle JSON -vormingus.

tehke endale emotikon iphone
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Nüüd saate ämbliku käivitada, määrates väljundi JSON -faili:

scrapy runspider spider3.py -o joe.json

Skript prindib nüüd kõik p elemendid.

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

Mitme elemendi kraapimine

Siiani on veebirobotid lehelt pealkirja ja ühte tüüpi elemendid kraapinud. Scrapy võib ka ühe skripti abil saada teavet erinevat tüüpi elementidest.

Võtame nädalavahetuseks välja IMDb kassa tipphitte. See teave on võetud http://www.imdb.com/chart/boxoffice , tabelis, kus on iga mõõdiku jaoks read.

The sõeluma () meetodiga saab realt välja võtta rohkem kui ühe välja. Chrome'i arendustööriistade abil leiate tabelisse sisestatud elemendid.

...
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 pilt selektor määrab selle img on järglane td.posterColumn . Õige atribuudi eraldamiseks kasutage väljendit | _+_ |.

Ämbliku käivitamine tagastab JSON -i:

::attr(src)

Veel veebikraapereid ja roboteid

Scrapy on üksikasjalik raamatukogu, mis võimaldab peaaegu igasugust veebis indekseerimist, kui te seda palute. Kui tegemist on teabe leidmisega HTML -elementidest koos Pythoni toega, on seda raske ületada. Ükskõik, kas loote veebirobotit või õpite veebi kraapimise põhitõdesid, on ainus piir, kui palju olete valmis õppima.

Kui otsite rohkem võimalusi indekseerijate või robotite loomiseks, võite proovida Twitteri ja Instagrami robotite loomine Pythoni abil . Python suudab veebiarenduses luua hämmastavaid asju, seega tasub seda keelt uurides minna veebirobotitest kaugemale.

Jaga Jaga Piiksuma E -post 15 Windowsi käsuviiba (CMD) käsku, mida peate teadma

Käsuviip on endiselt võimas Windowsi tööriist. Siin on kõige kasulikumad CMD -käsud, mida iga Windowsi kasutaja peab teadma.

Loe edasi
Seotud teemad
  • Programmeerimine
  • Veebimeistri tööriistad
  • Programmeerimine
  • Python
  • Kodeerimise õpetused
  • Veebirändurid
Autori kohta Anthony Grant(40 artiklit avaldatud)

Anthony Grant on vabakutseline kirjanik, kes hõlmab programmeerimist ja tarkvara. Ta on arvutiteaduse eriala, kes tegeleb programmeerimise, Exceli, tarkvara ja tehnoloogiaga.

Rohkem Anthony Grantilt

Telli meie uudiskiri

Liituge meie uudiskirjaga, et saada tehnilisi näpunäiteid, ülevaateid, tasuta e -raamatuid ja eksklusiivseid pakkumisi!

Tellimiseks klõpsake siin