目前專案在製作一個可以快速搜索遊戲卡片的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