Kako Napraviti Vlastiti Spider

Spider je skripta koja skuplja podatke sa drugih web stranica i sprema ih u odgovarajući format. Većina tražilica koristi spider-e kako bi skupila ključne riječi sa web stranica i rangirala web stranice na odgovarajući način. U ovom članku ću opisati kako napraviti vlastiti spider koristeći python framework Scrapy .

Šta vam je potrebno?

Morate imati instaliran Python, upute za instalaciju možete pronaći na linku kako-napraviti.geek.hr/kako-napraviti-pythonu-skriptu/

Nakon instalacije pythona potrebno je instalirati Scrapy, upute se nalaze na linku doc.scrapy.org/en/latest/intro/install.html

Kako napraviti Spider?

Nakon što ste instalirali python i Scrapy, potrebno je napraviti Scrapy project.
Za izradu projekta trebate pokrenuti scrapy sa sljedećim argumentima

scrapy startproject naziv_projekta

npr. napravit ću projekt naziva moj_spider pokretanjem naredbe:

scrapy startproject moj_spider

Nakon izvršenje naredbe automatski će se kreirati određene klase u pythonu i ostali podatci potrebni za izradu spidera.
Struktura podataka i direktorija je sljedeća:
moj_spider

moj spider3

moj spider 4

početi ćemo od direktorija moj_spider u kojem se nalazi python datoteka items.py, ako otvorite navedenu datoteku vidjeti će te sljedeći kod:

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

from scrapy.item import Item, Field

class MojSpiderItem(Item):
# define the fields for your item here like:
# name = Field()
pass

U datoteci items.py se definiraju varijable za klasu vašeg Spidera. Recimo da želim imati dvije varijable: name, url u koje će se spremati podatci sa drugih web stranica, promjeniti ću kod na sljedeći način :

from scrapy.item import Item, Field

class Website(Item):

name = Field()
url = Field()

Kod možete pogledati u ljepšem formatu na mom Git Hubu accountu na poveznici github.com/blaz1988/MySpider/blob/master/moj_spider/moj_spider/items.py
Idući korak je izrada spidera u pythonu i spremanje u direktorij spiders. Napravite python skriptu naziva moj_spider .py , sa sljedećim kodom github.com/blaz1988/MySpider/tree/master/moj_spider/moj_spider/spiders

from moj_spider.items import Website

class MojSpider(BaseSpider):
name = "spider"
allowed_domains = ["kako-napraviti.geek.hr"]
start_urls = [
"http://kako-napraviti.geek.hr/"
]

def parse(self, response):
"""
The lines below is a spider contract. For more info see:
http://doc.scrapy.org/en/latest/topics/contracts.html

@url http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/
@scrapes name
"""
hxs = HtmlXPathSelector(response)

sites = hxs.select('//div[@class="art-title"]')
items = []

for site in sites:
item = Website()
item['name'] = site.select('a[@class="title-link"]/text()').extract()
item['url'] = site.select('a[@class="title-link"]/@href').extract()

items.append(item)

return items

U listu start_urls spremate URL-ove web stranica koje želite da vaš spider pretraži , npr
start_url=["URL1","URL2","URL3"....]

Prije nego što počnete skupljati podatke sa neke web strranice , učitati će te željenu stranicu u web browser i kliknuti na View -> Page Source, ovisno o HTML kodu web stranice napravit će te vaš spider. U gore prikazanom kodu želim učitati sve naslove članaka i poveznice koje vode na članak sa web stranice kako-napraviti.geek.hr.
Varijabla sites = hxs.select('//div[@class="art-title"]') je lista svog sadržaja unutar div tagova clase “art-title” , takvih div tagova ima više. For petljom prolazimo kroz tu listu i u odgovarajuću varijablu spremamo točno određeni sadržaj.
npr. item['name'] = site.select('a[@class="title-link"]/text()').extract()
u dictionary item s ključem name sprema tekst koji se nalazi unutar html koda s div tagom klase art-title , te html koda za poveznice <a s klasom title-link, text() uzima samo tekst unutar tog html koda, postoji mogućnnost i da se izdvoji sadržaj html atributa kao i kompletnog html koda.

item['url'] = site.select('a[@class="title-link"]/@href').extract() uzima sadržaj atributa @href

Spider pokrećete tako da unutar direktorija naziv_vaseg_proejkta , npr github.com/blaz1988/MySpider/tree/master/moj_spider, tj. direktorija gdje se nalazi scrapy.cfg pokrenete naredbu

scrapy crawl spider -o items.json -t json

nakon izvršavanja prikupljeni podatci će se spremiti u datoteci items.json, koja je sljedećeg formata :
github.com/blaz1988/MySpider/blob/master/moj_spider/items.json

JSON podatke možete lako učitati pomoću pythona i dalje ih obrađivati, python kod za učitavanje JSON datoteke:

import json
json_file=open('items.json')
data = json.load(json_file)

Kompletni kod možete download-ati preko poveznice github.com/blaz1988/MySpider,desno dolje kliknite na Download Zip

Odgovori