Scrapy爬蟲框架將數(shù)據(jù)保存Mysql數(shù)據(jù)庫中


文章摘錄:https://github.com/lawlite19/PythonCrawler-Scrapy-Mysql-File-Template


settings.py

  • 修改Mysql的配置信息
#Mysql數(shù)據(jù)庫的配置信息
MYSQL_HOST = '127.0.0.1'
MYSQL_DBNAME = 'testdb'         #數(shù)據(jù)庫名字,請修改
MYSQL_USER = 'root'             #數(shù)據(jù)庫賬號,請修改 
MYSQL_PASSWD = '123456'         #數(shù)據(jù)庫密碼,請修改

MYSQL_PORT = 3306               #數(shù)據(jù)庫端口,在dbhelper中使用
  • 指定pipelines
ITEM_PIPELINES = {
    'webCrawler_scrapy.pipelines.WebcrawlerScrapyPipeline': 300,#保存到mysql數(shù)據(jù)庫
}

items.py

  • 聲明需要格式化處理的字段
class WebcrawlerScrapyItem(scrapy.Item):
    '''定義需要格式化的內容(或是需要保存到數(shù)據(jù)庫的字段)'''
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()   #修改你所需要的字段
    url = scrapy.Field()

pipelines.py

一、保存到數(shù)據(jù)庫的類WebcrawlerScrapyPipeline(在settings中聲明)

  • 定義一個類方法from_settings,得到settings中的Mysql數(shù)據(jù)庫配置信息,得到數(shù)據(jù)庫連接池dbpool
    @classmethod
    def from_settings(cls,settings):
        '''1、@classmethod聲明一個類方法,而對于平常我們見到的則叫做實例方法。 
           2、類方法的第一個參數(shù)cls(class的縮寫,指這個類本身),而實例方法的第一個參數(shù)是self,表示該類的一個實例
           3、可以通過類來調用,就像C.f(),相當于java中的靜態(tài)方法'''
        dbparams=dict(
            host=settings['MYSQL_HOST'],#讀取settings中的配置
            db=settings['MYSQL_DBNAME'],
            user=settings['MYSQL_USER'],
            passwd=settings['MYSQL_PASSWD'],
            charset='utf8',#編碼要加上,否則可能出現(xiàn)中文亂碼問題
            cursorclass=MySQLdb.cursors.DictCursor,
            use_unicode=False,
        )
        dbpool=adbapi.ConnectionPool('MySQLdb',**dbparams)#**表示將字典擴展為關鍵字參數(shù),相當于host=xxx,db=yyy....
        return cls(dbpool)#相當于dbpool付給了這個類,self中可以得到
  • __init__中會得到連接池dbpool
    def __init__(self,dbpool):
        self.dbpool=dbpool
  • process_item方法是pipeline默認調用的,進行數(shù)據(jù)庫操作
    #pipeline默認調用
    def process_item(self, item, spider):
        query=self.dbpool.runInteraction(self._conditional_insert,item)#調用插入的方法
        query.addErrback(self._handle_error,item,spider)#調用異常處理方法
        return item
  • 插入數(shù)據(jù)庫方法_conditional_insert
    #寫入數(shù)據(jù)庫中
    def _conditional_insert(self,tx,item):
        #print item['name']
        sql="insert into testpictures(name,url) values(%s,%s)"
        params=(item["name"],item["url"])
        tx.execute(sql,params)
  • 錯誤處理方法_handle_error
    #錯誤處理方法
    def _handle_error(self, failue, item, spider):
        print failue
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 小時候想快快長大,分擔父母的辛勞,現(xiàn)在希望時光停住腳步,父母不要老去。
    天邊的那一朵云閱讀 431評論 0 0
  • 一雙鞋,剛買的時候蹭上一點灰都要蹲下來擦干凈,穿久之后即使被人踩一腳可能也很少低頭。人大抵都是如此,不論對物還是對...
    Lorna_AuYeung閱讀 90評論 0 0
  • 小舅篇 孩子和比他還小三歲的小舅玩的愈來愈默契,從剛開始的嫌棄小舅太小不好玩,到慢慢的開始接納后面有個小陀螺...
    梅子Mey閱讀 225評論 0 3
  • “老吾老,以及人之老;幼吾幼,以及人之幼。天下可運與掌。”——孟子 母愛如水 無論你奔騰到哪里 身上流淌的 依然有...
    廣享堂閱讀 284評論 0 0

友情鏈接更多精彩內容