Scrapy的文件結構 以及 幾個文件之間的聯繫

(!!!————本篇博客以 ” 伯樂在線 “ 網站爲例————!!!)

幾個文件之間的聯繫

    1. name.py(例如:a58tc.py) (以 58同城 爲例)

        (1)通過一系列的 xpath 匹配獲取到要爬取的內容(字段)
        (2)通過實例化items.py 中定義的類
                item = TaobaoItem()
        (3)把內容用字典的形式傳給 items.py
                item['name'] = name
                item['title'] = title
                item['price'] = price

                yield item  # 把數據傳給 items.py    

-------------------------------------------------------------------
    2. items.py(定義 scrapy 內部數據的 模型 的文件)

        class TongchengItem(scrapy.Item):
            mingzi = scrapy.Field()
            title = scrapy.Field()
            nian = scrapy.Field()

            def save(self):
                sql = 'insert into tc_test(mingzi,title,nian,licheng,rongliang,moshi,price,img) values(%s,%s,%s,%s,%s,%s,%s,%s)'
                data = (self['mingzi'],self['title'],self['nian'],self['licheng'],self['rongliang'],self['moshi'],self['price'],self['img'],)
                return (sql,data)  # 把值傳給 pipelines.py
------------------------------------------------------------------      
    3. pipelines.py
        # 當我們的items 被返回的時候, 會自動調用我們的pipline類中的process_item()需要加到setting裏面:))

        class Scrapy58LjwPipeline(object):
            def process_item(self,item,spider):

                (sql,data) = item.save()  # 返回值給pipelines.py
                mysql_58 = MysqlHelper() # 調用連接數據庫類中的函數save()
                mysql_58.execute_modify_sql(sql,data) # 把數據存到數據庫

                return item
-----------------------------------------------------------------
    4. settings.py
        ITEM_PIPELINES = {
            'scrapy_ljw.pipelines.Scrapy58LjwPipeline': 300,
        }

Scrapy的文件結構

1. items.py ———(是定義scrapy內部數據的文件 )
# (1) items.py 裏的類都是繼承 scrapy.item,如:
# (2) 這個類裏邊所有的屬性都等於scrapy.Field()

    class BoleItem(scrapy.Item):
        title = scrapy.Field()      # name 是屬性
        original_article = scrapy.Field()     # original_article 是屬性
        translated_article = scrapy.Field()
        content = scrapy.Field()
2. pipelines.py———( pipelines.py :當我們的items被返回的時候,會自動調用我們的pipelines類中process_item(),需要加到settings.py裏面:)
ITEM_PIPELINES={
        'today_scrapy.pipelines.StoreMysqlScrapyPipeline': 300,
    }
3. settings.py
    CONCURRENT_REQUESTS = 32     # 默認是16  類似於進程池開啓了16個進程同時進行,提高效率

bole.py文件具體解釋

  1. 一個url對應一個函數,這個函數用來解析url

    yield scrapy.Request(href,callback=self.parse_detail)

// 是搜索 而 / 只是找div下緊跟的文本內容

    <div>How old are you?
            <span>怎麼老是你?</span>
    </div>
    //text()  找到的是How old are you? 和 怎麼老是你?
    /text()   找到的是How old are you? 

Scrapy 框架的優點

1. 最大的優點是:可以提高效率,不用自己寫多進程和多線程
2. settings.py 文件裏的 CONCURRENT_REQUESTS = 32 如果不打開,則默認是16個(意思是類似於開了16的進程的效果,但它用的不一定是進程和線程,只是起到了同樣的提高效率的作用)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章