關於scrapy(一)

整體結構

1

其中,python是整個scrapy的根目錄。items定義要爬取的數據;pipeline將爬取得數據進行保存;setting是負責整體的調控,控制是否遵守協議、啓用哪一個spider爬取、爬取pipeline的順序等。

spider文件下的爬蟲的主體文件。

創建

打開cmd,輸入scrapy startproject name(name是工程名),即可以創建一個工程文件夾,包含以上文件,在cd spider,輸入 scrapy genspider spidername website(spidername是爬蟲名字,website是爬取的網站),一個爬蟲基礎文件創建成功。

另外

scrapy shell website可以方標調試xpath,即需要抽取的内容。

items

定義一個類,繼承scrapy.item的基類;本次爬取得什麽值得買網站上流信息内容;所以定義一個smzdmitem

class smzdmitem(scrapy.Item):
    pagetitle = scrapy.Field() # 標題
    price = scrapy.Field() #價格
    des = scrapy.Field() #描述

spider主體文件

spider文件下是爬蟲的主要執行文件,整個目錄下可以包含很多個爬蟲,本次只寫了一個爬蟲。

import scrapy
from python.items import smzdmitem ##從python目錄下的items文件裏導入 smzdmitem類

class SmzdmSpider(scrapy.Spider):
    name = 'smzdm' #爬蟲的命名
    allowed_domains = ['smzdm.com'] 
    start_urls = ['http://smzdm.com/'] #起始爬取的網頁

    def parse(self, response): 
        sels=response.xpath('//*[@id="feed-main-list"]/li')  #response是返回的所有内容,采用xpath定義路徑,方便後面進行内容分析
        items=[] #生成一個列表
        for sel in sels:
            item=smzdmitem() #列表繼承
            item['pagetitle']=sel.xpath('h5/a/text()').extract()
            item['price']=sel.xpath('h5/a/span').extract()
            item['des']=sel.xpath('div/div[2]/div[2]').extract()
            #抽取相應的内容
            items.append(item) #增加在列表中
        return items 
    #此返回非常重要,注意縮進的位置,有此返回才能夠讓pipeline保存相應的内容

pipeline

此文夾下可以定義一個函數,process_item,表示在爬蟲運行過程中,需要產生的動作:

import time
import codecs
# 引入編碼和時間内容

class smzdmpipeline(object):#重新定義一個類,繼承object
    def process_item(self,item,spider):#運行過程函數
        today = time.strftime('%y-%m-%d', time.localtime())
        #獲取本地時間
        filename = '什麽值得買' + today + '.txt'
        #保存文件名命名
        with codecs.open(filename, 'a+', 'utf-8')as fp:
            #創建文件
            fp.write('%s \r\n %s \r\n %s \r\n'
            %(item['pagetitle'],item['price'],item['des']))
            #寫入文件,并保存 
        return item

setting

在configure item pipeline處加入一個

ITEM_PIPELINES = {
    'python.pipelines.smzdmpipeline':1
} #定義pipeline的順序,後面的數字越小,越早執行(在有多個pipeline的情況下

setting文件裏可以定義多項設置

你可能感兴趣的:(關於scrapy(一))