將爬取的資料儲存到mysql中
為了把資料儲存到mysql費了很多周折,早上再來折騰,終於折騰好了
安裝資料庫
1、pip install pymysql(根據版本來裝)
2、建立資料
開啟終端 鍵入mysql -u root -p 回車輸入密碼
create database scrapy (我新建的資料庫名稱為scrapy)
3、建立表
use scrapy;
create table xiaohua (name varchar(200) ,url varchar(100));
資料庫部分就醬紫啦
4、編寫pipeline
5、編寫setting
6、編寫spider檔案
7、爬取資料儲存到mysql
scrapy crawl xhwang
之前報錯為2018-10-18 09:05:50 [scrapy.log] ERROR: (1241, 'Operand should contain 1 column(s)')
因為我的spider程式碼中是這樣
附一張網上找到的答案
錯誤原因:item中的結果為{'name':[xxx,xxxx,xxxx,xxx,xxxxxxx,xxxxx],'url':[yyy,yyy,yy,y,yy,y,y,y,y,]},這種型別的資料
更正為6下面程式碼後出現如下會有重複
然後又查了下原因終於解決問題之所在
在圖上可以看出,爬取的資料結果是沒有錯的,但是在儲存資料的時候出錯了,出現重複資料。那為什麼會造成這種結果呢?
其原因是由於spider的速率比較快,scrapy操作資料庫相對較慢,導致pipeline中的方法呼叫較慢,當一個變數正在處理的時候
一個新的變數過來,之前的變數值就會被覆蓋了,解決方法是對變數進行儲存,在儲存的變數進行操作,通過互斥確保變數不被修改。
在pipeline中修改如下程式碼
完成以上設定再來爬取,OK 大功告成(擷取部分)