2015年4月28日 星期二

Scrapy 使用心得(1)


目前專案在製作一個可以快速搜索遊戲卡片的app
由於已經有相關的wiki了
所以只需要爬資料下來做好search功能

趁現在記憶猶新趕快把心得寫下提醒未來的自己XD

我所使用的環境為: python 2.7, win7 64, mongodb

目的:爬資料進去mongodb

安裝方式為:
pip install scrapy


安裝好了之後開始一個新的專案
scrapy startproject myapp

於是會建立一個
myapp資料夾


檔案結構為
myapp/
    scrapy.cfg
    myapp/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...
spider資料夾內沒有檔案要自行建立spider的檔案
基本上scrapy提供許多種spider
BaseSpider:
from scrapy.spider import BaseSpider
只會爬你提供的url

CrawlSpider:
from scrapy.contrib.spiders import CrawlSpider
會爬你提供的url並把裡面的links也爬一爬

基本上我只使用過這兩種其他就不說明了

BaseSpider使用範例
我們先在spider資料夾內建立一個叫spider.py(檔名可以任意取喔)



from scrapy.spider import BaseSpider


class myappSpiders(BaseSpider): 

 

     name = 'myspider_name' #這個名字很重要喔對scrapy不熟的可能要浪費好幾分鐘在這

     allowed_domains = ['www.example.com']  #要爬的domain


     #start_urls就是爬蟲開始爬的第一個網頁,在BaseSpider中就只爬提供的這些urls
     start_urls = ['http://www.basespider.com/page1'
               ,'http://www.basespider.com/page2'
        ]

    #爬蟲從url爬完會丟到parse內你就可以從這邊設定你想取出的資料是什麼
def parse(self, response): hxs = HtmlXPathSelector(response) item = myappItem() item['item_field'] = hxs.select('//h1[@id="css_id"]/span/text()').extract() return item #這邊看到item = myappItem()與item['item_field']要先到item.py設定好 #return item會把item丟進去pipeline去處理,資料量不多其實這邊寫個file.write就好了

item.py的設定範例


from scrapy.item import Item, Field


class myappItem(Item):
    item_field = Field()

#class要跟spider.py內的myappItem同名, 每個你要抓的item_field都要來設定一下Field()




接著把terminal小黑窗目標移到scrapy.cfg同個位置
執行
scrapy crawl myspider_name
就可以開始抓囉
不要跟我一樣scrapy crawl 檔名浪費好幾分鐘阿XD

等我下次心血來潮再把後面補完QQ