Kako izgraditi osnovni alat za indeksiranje weba za povlačenje informacija s web stranice

Kako izgraditi osnovni alat za indeksiranje weba za povlačenje informacija s web stranice

Programi koji čitaju podatke s web stranica ili web alati za indeksiranje imaju sve vrste korisnih aplikacija. Možete potražiti informacije o dionicama, sportske rezultate, tekst s Twitter računa ili povući cijene s web stranica za kupovinu.





Pisanje ovih programa za indeksiranje weba lakše je nego što mislite. Python ima izvrsnu biblioteku za pisanje skripti koje izvlače informacije s web stranica. Pogledajmo kako izraditi web indeks pomoću Scrapya.





Instaliranje Scrapya

Skrapiranje je knjižnica Python koja je stvorena za struganje weba i izradu web alata za indeksiranje. Brz je, jednostavan i može se kretati kroz više web stranica bez mnogo napora.





Scrapy je dostupan putem knjižnice Pip Installs Python (PIP), evo osvježenja kako instalirati PIP na Windows, Mac i Linux .

Korištenje Python virtualnog okruženja poželjno je jer će vam omogućiti da instalirate Scrapy u virtualni direktorij koji ostavlja vaše sistemske datoteke na miru. Scrapina dokumentacija preporučuje da se to učini kako bi se postigli najbolji rezultati.



Napravite direktorij i inicijalizirajte virtualno okruženje.

notepad ++ usporedite 2 datoteke
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Sada možete instalirati Scrapy u taj direktorij pomoću PIP naredbe.





pip install scrapy

Brza provjera je li Scrapy pravilno instaliran

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 izgraditi web pretraživač

Sada kada je okruženje spremno, možete početi s izradom web alata za indeksiranje. Izdvojimo neke podatke sa stranice Wikipedije o baterijama: https://en.wikipedia.org/wiki/Battery_(elektrika) .





Prvi korak za pisanje alata za indeksiranje je definiranje Python klase koja se proteže od Scrapy.Pauk . To vam daje pristup svim funkcijama i značajkama programa Scrapy. Nazovimo ovaj razred pauk1 .

Klasa pauka treba nekoliko podataka:

  • do Ime za identifikaciju pauka
  • do start_urls varijabla koja sadrži popis URL -ova s ​​kojih se može indeksirati (URL Wikipedije bit će primjer u ovom vodiču)
  • do raščlaniti () metoda koja se koristi za obradu web stranice radi izvlačenja informacija
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Brzi test kako biste bili sigurni da sve radi ispravno.

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

Isključivanje bilježenja

Pokretanje Scrapya s ovom klasom ispisuje podatke iz dnevnika koji vam trenutno neće pomoći. Učinimo to jednostavnim uklanjanjem ovih viška podataka dnevnika. Koristi upozorenje iskaz dodavanjem koda na početak datoteke.

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

Sada, kada ponovno pokrenete skriptu, podaci zapisnika neće se ispisati.

Korištenje preglednika Chrome

Sve na web stranici pohranjeno je u HTML elementima. Elementi su raspoređeni u Objektnom modelu dokumenta (DOM). Razumijevanje DOM -a ključno je za maksimalno iskorištavanje vašeg web alata za indeksiranje. Alat za indeksiranje weba pretražuje sve HTML elemente na stranici kako bi pronašao informacije, pa je važno znati kako su raspoređeni.

Google Chrome ima alate koji vam pomažu da brže pronađete HTML elemente. Pomoću inspektora možete pronaći HTML za bilo koji element koji vidite na web stranici.

  • Idite na stranicu u Chromeu
  • Postavite miš na element koji želite vidjeti
  • Desnom tipkom miša kliknite i odaberite Pregledati s izbornika

Ovi će koraci otvoriti razvojnu konzolu s Elementi kartica odabrana. Pri dnu konzole vidjet ćete stablo elemenata. Ovo stablo je način na koji ćete dobiti informacije za svoju skriptu.

Izdvajanje naslova

Učinimo da scenarij obavi neki posao umjesto nas; Jednostavno pretraživanje i indeksiranje da biste dobili naslovni tekst web stranice.

Pokrenite skriptu dodavanjem nekog koda u raščlaniti () metoda koja izdvaja naslov.

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

The odgovor argument podržava metodu tzv CSS () koji odabire elemente sa stranice pomoću lokacije koju navedete.

U ovom primjeru element je h1.prvoVoditeljstvo . Dodavanje

::text

skripti je ono što vam daje tekstualni sadržaj elementa. Konačno, ekstrakt() metoda vraća odabrani element.

Pokretanje ove skripte u programu Scrapy ispisuje naslov u tekstualnom obliku.

[u'Battery (electricity)']

Pronalaženje opisa

Sada kada smo izgrebali naslovni tekst, učinimo više sa skriptom. Alat za indeksiranje pronaći će prvi odlomak iza naslova i izdvojiti ove podatke.

Evo stabla elemenata na konzoli za razvojne programere Chrome:

kako najbolje koristiti google voice
div#mw-content-text>div>p

Strelica desno (>) označava odnos roditelj-dijete između elemenata.

Ova će lokacija vratiti sve str podudaranje elemenata, što uključuje cijeli opis. Da biste dobili prvu str element možete napisati ovaj kod:

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

Baš kao i naslov, dodajete CSS ekstraktor

::text

da biste dobili tekstualni sadržaj elementa.

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

Završni izraz koristi ekstrakt() za vraćanje popisa. Možete koristiti Python pridružiti() funkcija za pridruživanje popisu nakon što je sve indeksiranje dovršeno.

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

Rezultat je prvi odlomak teksta!

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

Prikupljanje JSON podataka

Scrapy može izvući informacije u tekstualnom obliku, što je korisno. Scrapy vam također omogućuje pregled podataka JavaScript Object Notation (JSON). JSON je uredan način za organiziranje informacija i naširoko se koristi u web razvoju. JSON prilično dobro radi s Pythonom također.

Kad trebate prikupljati podatke kao JSON, možete koristiti prinos izjava ugrađena u Scrapy.

Evo nove verzije skripte koja koristi izjavu o prinosu. Umjesto da dobije prvi p element u tekstualnom formatu, ovo će zgrabiti sve p elemente i organizirati ga u JSON formatu.

disk je uvijek na 100 windows 10
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Sada možete pokrenuti pauka navođenjem izlazne JSON datoteke:

scrapy runspider spider3.py -o joe.json

Skripta će sada ispisati sve p elemente.

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

Struganje više elemenata

Do sada je web -alat za indeksiranje izbrisao naslov i jednu vrstu elementa sa stranice. Scrapy također može izvući informacije iz različitih vrsta elemenata u jednoj skripti.

Izdvojimo vrhunske IMDb Box Office hitove za vikend. Ove informacije su izvučene iz http://www.imdb.com/chart/boxoffice , u tablici s retcima za svaki mjerni podatak.

The raščlaniti () metoda može izdvojiti više polja iz retka. Pomoću alata za razvojne programere Chrome možete pronaći elemente ugniježđene unutar tablice.

...
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 slika selektor to navodi img potomak je td.posterColumn . Da biste izvukli desni atribut, upotrijebite izraz | _+_ |.

Pokretanje pauka vraća JSON:

::attr(src)

Više web strugača i robota

Scrapy je detaljna biblioteka koja može učiniti bilo koju vrstu pretraživanja i pretraživanja weba koju tražite. Što se tiče pronalaženja informacija u HTML elementima, u kombinaciji s podrškom Pythona, teško je pobijediti. Bez obzira na to gradite li web alat za indeksiranje ili učite o osnovama struganja weba, jedino ograničenje je koliko ste spremni naučiti.

Ako tražite više načina za izradu alata za indeksiranje ili robota, možete pokušati izradite Twitter i Instagram botove pomoću Pythona . Python može stvoriti neke nevjerojatne stvari u web razvoju, pa vrijedi nadići web pretraživače prilikom istraživanja ovog jezika.

Udio Udio Cvrkut E -pošta 15 Komande Windows naredbenog retka (CMD) koje morate znati

Naredbeni redak i dalje je moćan Windows alat. Evo najkorisnijih CMD naredbi koje svaki korisnik sustava Windows mora znati.

Pročitajte Dalje
Povezane teme
  • Programiranje
  • Alati za webmastere
  • Programiranje
  • Piton
  • Vodiči za kodiranje
  • Alati za indeksiranje weba
O autoru Anthony Grant(Objavljeno 40 članaka)

Anthony Grant je slobodni pisac koji se bavi programiranjem i softverom. On je glavni informatičar koji se bavi programiranjem, Excelom, softverom i tehnologijom.

Više od Anthonyja Granta

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu