Scrapy基礎(十)———同步機制將Item中的數據寫在Mysql



  前面講解到將Item中的所有字段都已經填寫完成,那么接下來就是將他們存儲到mysql數據庫中,
那就用到了pipeline項目管道了;
  對項目管道的理解:做一個比喻,爬取好比是開采石油,Item裝的都是原油,需要通過一系列的管道
和工藝進行提煉,而這些原油都是通過pipeline進行加工的,才能真正的到我們所能使用的油(數據)
  大致思路:
      1, 安裝MySQLdb和連接數據庫的驅動mysqlclient,並創建數據庫和相應的表,創建和Item的字段
        一樣的字段(注意各個字段的類型,長度和默認值);這些操作可通過navicat進行操作
      2,自定義pipeline,引入mysqldb庫,將Item中的數據寫入數據庫
      3,在settings文件中注冊這個管道,並給這個管道一個編號(這個管道在哪條工藝之后進行)

具體代碼

 1 #引入操作數據庫模塊
 2 import MySQLdb
 3 
 4 class MysqlPipeline(object):
 5     '''
 6     同步機制實現mysql寫入操作
 7     '''
 8 
 9     #定義初始化函數,當類被使用時自動調用這個函數,我們讓他初始化時就連接上數據庫
10     def __init__(self):
11         #取個變量名,連接數據庫,依次是: host,user,password,dbname
12         self.conn = MySQLdb.connect("127.0.0.1","root","root","artical_spider")
13         #通過cursor()的方法獲取游標
14         self.cursor = self.conn.cursor()
15 
16     #自定義的管道必須有此方法
17     def process_item(self,item,spider):
18         #要執行的插入sql語句
19         insert_sql = """
20             insert into jobbole_artical(title,creat_date,url,url_object_id,
21                 front_image_url2,front_image_path,tags,comment_num,
22                 fav_num,like_num,content
23                 )
24             VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
25         """
26         
27         #執行sql語句,注意后面是元組,將Item中的數據格式化填充到插入語句中
28         self.cursor.execute(insert_sql,(item["title"],item["creat_date"],item["url"],
29             item["url_object_id"],item["front_image_url2"],item["front_image_path"],
30             item["tags"],item["comment_num"],item["fav_num"],item["like_num"],item["content"]))
31 
32         #將sql語句提交到數據庫執行
33         self.conn.commint()

注意:

一:

我們從前設置過

artical_item["front_image_url"] = [front_image_url]

這個Item是一個列表類型,當你寫入數據庫時候報錯, 

File "C:\Users\Administrator\Envs\artical_spider\lib\site-packages\MySQLdb\converters.py", line 90, in quote_tuple
    return "(%s)" % (','.join(escape_sequence(t, d)))
TypeError: sequence item 0: expected str instance, bytes found

當我們改為str時圖片的下載路徑又不能正常工作,

所以只能添加一個新的一樣的Item,一個設置為列表,供圖片下載,一個為寫入數據庫中做准備

二:

對於數據庫各個字段的設置,這里可將一些字段設置為不為空,並且設置一些字段的默認值;

這里講url_object_id設置成主鍵,主鍵不能為空且唯一;在

在寫入數據庫時,各個字段要和Item字段的順序相對應

三:

關於python對數據庫的操作,本篇參考了這篇博文

以下是運行結果

 






































'''


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM