Kako zgraditi osnovnega spletnega pajka za pridobivanje informacij s spletnega mesta

Kako zgraditi osnovnega spletnega pajka za pridobivanje informacij s spletnega mesta

Programi, ki berejo informacije s spletnih mest ali spletnih iskalnikov, imajo vse vrste uporabnih aplikacij. Poiščete lahko informacije o zalogah, športne rezultate, besedilo iz računa Twitter ali povlečete cene s spletnih mest za nakupovanje.





Pisanje teh programov za iskanje po spletu je lažje, kot si mislite. Python ima odlično knjižnico za pisanje skriptov, ki črpajo informacije s spletnih mest. Poglejmo, kako z uporabo Scrapy ustvariti spletnega pajka.





Namestitev programa Scrapy

Scrapy je knjižnica Python, ki je bila ustvarjena za strganje po spletu in izdelavo spletnih pajkov. Je hiter, preprost in se lahko brez veliko truda pomika po več spletnih straneh.





Scrapy je na voljo v knjižnici Pip Installs Python (PIP), tukaj je osvežitev kako namestiti PIP na Windows, Mac in Linux .

Zaželena je uporaba navideznega okolja Python, ker vam bo omogočila namestitev programa Scrapy v navidezni imenik, ki pusti sistemske datoteke pri miru. Dokumentacija Scrapy priporoča, da to storite za najboljše rezultate.



Ustvarite imenik in inicializirajte navidezno okolje.

kakšna je razlika med 1080i in 1080p
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Zdaj lahko v ta imenik namestite Scrapy z ukazom PIP.





pip install scrapy

Na hitro preverite, ali je Scrapy pravilno nameščen

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

Kako zgraditi spletnega pajka

Zdaj, ko je okolje pripravljeno, lahko začnete graditi spletni pajek. Poiščimo nekaj informacij s strani Wikipedije o baterijah: https://en.wikipedia.org/wiki/Battery_(elektrika) .





Prvi korak pri pisanju pajka je opredelitev razreda Python, ki se razteza od Scrapy. Pajek . Tako imate dostop do vseh funkcij in funkcij programa Scrapy. Pokličimo ta razred pajek 1 .

Razred pajkov potrebuje nekaj informacij:

  • do ime za identifikacijo pajka
  • do start_urls spremenljivka, ki vsebuje seznam URL -jev za iskanje po vsebini (URL v Wikipediji bo primer v tej vadnici)
  • do razčlenjevanje () metoda, ki se uporablja za obdelavo spletne strani za pridobivanje informacij
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Hiter test, da preverite, ali vse deluje pravilno.

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

Izklop beleženja

Izvajanje programa Scrapy s tem razredom natisne podatke iz dnevnika, ki vam trenutno ne bodo pomagali. Poenostavimo tako, da odstranimo te presežne podatke dnevnika. Uporabi Opozorilo izjavo z dodajanjem kode na začetek datoteke.

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

Ko znova zaženete skript, se podatki dnevnika ne bodo natisnili.

Uporaba inšpektorja Chrome

Vse na spletni strani je shranjeno v elementih HTML. Elementi so razvrščeni v objektni model dokumenta (DOM). Razumevanje DOM je ključnega pomena za čim boljši izkoristek vašega spletnega pajka. Spletni pajek išče informacije po vseh elementih HTML na strani, zato je pomembno, da veste, kako so razporejeni.

Google Chrome ima orodja, ki vam pomagajo hitreje najti elemente HTML. S pomočjo inšpektorja lahko poiščete HTML za kateri koli element, ki ga vidite na spletni strani.

  • Pomaknite se na stran v Chromu
  • Z miško postavite element, ki si ga želite ogledati
  • Z desno tipko miške kliknite in izberite Preglejte iz menija

Ti koraki bodo odprli konzolo za razvijalce z Elementi zavihek izbran. Na dnu konzole boste videli drevo elementov. To drevo je način, na katerega boste dobili informacije za svoj skript.

Izvlečenje naslova

Naj scenarij opravi nekaj dela namesto nas; Preprosto pajkanje, da dobite naslovno besedilo spletne strani.

Zaženite skript tako, da dodate nekaj kode v datoteko razčlenjevanje () metoda, ki izvleče naslov.

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

The odziv argument podpira metodo, imenovano CSS () ki na strani, ki jo navedete, izbere elemente s strani.

V tem primeru je element h1.firstHeading . Dodajanje

::text

skriptu je tisto, kar vam daje besedilno vsebino elementa. Končno, izvleček () metoda vrne izbrani element.

Zagon tega skripta v Scrapy natisne naslov v besedilni obliki.

[u'Battery (electricity)']

Iskanje opisa

Zdaj, ko smo strgali naslovno besedilo, naredimo več s skriptom. Pajek bo poiskal prvi odstavek za naslovom in izvlekel te podatke.

Tu je drevo elementov v konzoli za razvijalce za Chrome:

kako do novega e -poštnega naslova
div#mw-content-text>div>p

Puščica desno (>) označuje odnos starš-otrok med elementi.

Ta lokacija bo vrnila vse str elementi se ujemajo, kar vključuje celoten opis. Da bi dobili prvega str element lahko napišete to kodo:

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

Tako kot naslov dodate ekstraktor CSS

::text

da dobite besedilno vsebino elementa.

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

Končni izraz uporablja izvleček () vrniti seznam. Uporabite lahko Python pridruži se () funkcijo za pridružitev seznamu, ko je vse pajkanje končano.

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

Rezultat je prvi odstavek besedila!

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

Zbiranje podatkov JSON

Scrapy lahko izvleče informacije v besedilni obliki, kar je koristno. Scrapy vam omogoča tudi ogled podatkov JavaScript Object Notation (JSON). JSON je čeden način za organiziranje informacij in se pogosto uporablja pri spletnem razvoju. JSON deluje zelo lepo s Pythonom tudi.

Ko morate zbirati podatke kot JSON, lahko uporabite donos izjavo, vgrajeno v Scrapy.

Tukaj je nova različica skripta, ki uporablja izjavo o izkoristku. Namesto prvega elementa p v besedilni obliki bo ta zajel vse elemente p in ga organiziral v obliki JSON.

kako fotografiji dodati ozadje
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Zdaj lahko zaženete pajka tako, da podate izhodno datoteko JSON:

scrapy runspider spider3.py -o joe.json

Skript bo zdaj natisnil vse elemente p.

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

Strganje več elementov

Doslej je spletni pajek s strani izbrisal naslov in eno vrsto elementa. Scrapy lahko v enem scenariju izvleče tudi informacije iz različnih vrst elementov.

Izločimo vrhunske uspešnice blagajne IMDb za vikend. Ti podatki so povzeti iz http://www.imdb.com/chart/boxoffice , v tabeli z vrsticami za vsako meritev.

The razčlenjevanje () metoda lahko iz vrstice izvleče več kot eno polje. Z orodji za razvijalce za Chrome lahko najdete elemente, ki so ugnezdeni v tabeli.

...
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 sliko Izbirnik to določa img je potomec td.posterColumn . Če želite izvleči pravi atribut, uporabite izraz | _+_ |.

Zagon pajka vrne JSON:

::attr(src)

Več spletnih strgal in botov

Scrapy je podrobna knjižnica, ki lahko naredi skoraj vse vrste brskanja po spletu, ki jih zahtevate. Ko gre za iskanje informacij v elementih HTML, skupaj s podporo Pythona, je to težko premagati. Ne glede na to, ali gradite spletnega pajka ali spoznavate osnove strganja po spletu, je edina omejitev, koliko ste se pripravljeni naučiti.

Če iščete več načinov za izdelavo pajkov ali botov, lahko poskusite gradite Twitter in Instagram bote s Pythonom . Python lahko v spletnem razvoju ustvari nekaj neverjetnih stvari, zato je pri raziskovanju tega jezika vredno preseči spletne iskalnike.

Deliti Deliti Cvrkutati E-naslov 15 ukazov ukaznega poziva Windows (CMD), ki jih morate poznati

Ukazni poziv je še vedno močno orodje Windows. Tu so najbolj uporabni ukazi CMD, ki jih mora poznati vsak uporabnik sistema Windows.

Preberite Naprej
Sorodne teme
  • Programiranje
  • Orodja za spletne skrbnike
  • Programiranje
  • Python
  • Vadnice za kodiranje
  • Spletni pajki
O avtorju Anthony Grant(40 objavljenih člankov)

Anthony Grant je samostojni pisatelj, ki pokriva programiranje in programsko opremo. Je glavni računalnik na področju programiranja, Excela, programske opreme in tehnologije.

Več od Anthonyja Granta

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e -knjige in ekskluzivne ponudbe!

Kliknite tukaj, če se želite naročiti