將爬取的數據保存到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 大功告成(截取部分)

 

 

 

 


免責聲明!

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



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