1. 程式人生 > >Scrapy爬蟲經驗總結

Scrapy爬蟲經驗總結

  1. 安裝上,windows反而很順利,在搬瓦工的VPS上安裝時需要注意一些問題。首先是升級python到2.7版,這是scrapy需求的,這個問題網上有很多現成的教程,不需要重複了。
  2. python升級之後,仍然可能安裝失敗,需要安裝一些python開發庫,主要是下面這些:
    1yum install python-devel libxml2-devel libxslt-devel
    1 yuminstall pyOpenSSL
  3. 用scrapy建立工程之後,在spiders目錄下新增python檔案編寫爬蟲時,最好不要讓檔名和工程名一樣,否則你從上一級目錄匯入自定義的item類時會出問題。
  4. scrapy shell在cygwin的terminal下執行有問題,改回windows的cmd環境就正常了。
  5. 爬蟲程式碼中,如果需要除錯資訊,用logging模組而不是print,print要等到爬蟲執行完之後才會列印,而logging是即時的。
  6. 如果想減少一些爬蟲的除錯資訊,可以在setting.py中巴log_level調高,預設是DEBUG,改成INFO,或者WARNING可以減少很多不必要的資訊,但這是在你確保爬蟲沒問題之後才能做的。
  7. 自己寫的pipeline一定要在setting.py中新增進去,否則是無效的。
  8. DropItem是一個異常呼叫,應該寫raise DropItem(‘your info’),而不是把它當一個普通函式來呼叫,那樣是無效的。
  9. 爬蟲要爬哪些URL,這個是不需要擔心會重複的,scrapy自己的排程系統裡面有基本的duplicate filter,但是獲取的item是否有重複,就需要你自己在pipeline裡面判斷了。因為url不用擔心重複,所以你在列舉下一級的連結時,可以放心大膽的yield大量頁面連結,我剛開始擔心有重複,每次只yield下一頁的連結給parser,結果速度非常慢。
  10. 不要爬牆外的網站,除非你有絕對穩定的翻牆途徑,否則在爬了一大半之後看到一堆twisted io error然後爬蟲掛掉,真是很痛苦的事情。最好直接把爬蟲放在國外伺服器上爬被牆的網站,事實證明國外的VPS比國內最快的翻牆路線執行爬蟲的速度還要快三倍。
  11. Concurrent Connection Per IP/Domain可以調大,16執行緒是小意思,預設的8執行緒太慢了。
  12. 1from scrapy.exceptions import CloseSpider
    這個異常可以用來手動關閉爬蟲,記住,和DropItem一樣,這是個異常,要raise而不是呼叫。
  13. 使用selector匹配網頁內容時,要多挑寫頁面測試xpath規則,因為某些元素在第一頁存在,在後面的頁面中就不一定存在了,這樣xpath extract出來的可能是個None,這個時候你還用原有的規則取第一個元素,就可能爆IndexError Exception,直接讓程式停掉。
  14. 任何Exception都可以讓爬蟲停掉,所以一定要多做抽樣測試,免得跑了一半掛掉,再改程式重跑。我建議的檢查順序是,先關閉pipeline,也不做具體內容抽取,只先做連結抽取,這樣讓爬蟲跑一段看看Console的輸出資訊,先確定自己要抓的各種連結都有被覆蓋。然後就是抽一部分頁面做具體內容抓取,確保你用的xpath規則能覆蓋所有頁面而不報錯,如果單純的xpath規則不行,你要考慮xpath+re正則表示式,後者的魯棒性要好很多。
  15. 對於ajax內容,要分析網頁,找出最終的資料來源。因為ajax的本質就是javascript在你本地的瀏覽器執行,偷偷的又向伺服器查詢了一次資料用於填充頁面,你只要找出這個偷偷查詢的內容,然後用requests之類的模組查詢一次就可以了。
  16. 對於普通的link,scrapy本身會檢查並確保頁面被成功抓取(在網路沒斷的前提下),基本不用擔心資料完整性。對於ajax內容你用其他方式查詢了資料的,需要處理好查詢方法的返回值,在沒有查詢成功的情況下,可以讓pipeline有個標誌位來判斷是否需要重新抓取,還是把這些不完整的資料存到另一個數據庫以後再修補。
  17. 在匹配xpath規則時,如果你在firebug中除錯,請一定先用Noscript之類的外掛禁用指令碼。因為有些網站在啟用js和不用js的情況下,很多元素的class名字是不一樣的,而爬蟲看到的頁面永遠是沒有js指令碼執行的,最簡單的方法還是先用scrapy shell抓一個頁面,測試好xpath規則之後再寫程式碼。
  18. 對於日文頁面,標準的‘GBK’編碼可能不足以顯示所有字元,可以用str.encode(‘GB18030’)的方式先擴到GB18030編碼,這個編碼基本是可以覆蓋CJK所有字元的。
  19. 對於matplotlib中,生成圖片裡中文的亂碼,加上下面這樣一行,給中文指定箇中文字型就好了。
    1 matplotlib.rcParams['font.sans-serif']=['SimHei']
     
  20. 當資料量大的時候,儲存資料用jsonlines而不是json,這樣就算有個別數據因為網路或檔案io問題不完整的時候,頂多損失一行資料,而不需要再一個幾十萬位元組長的單行裡查詢哪裡錯了。

相關推薦

Scrapy爬蟲經驗總結

安裝上,windows反而很順利,在搬瓦工的VPS上安裝時需要注意一些問題。首先是升級python到2.7版,這是scrapy需求的,這個問題網上有很多現成的教程,不需要重複了。python升級之後,仍然可能安裝失敗,需要安裝一些python開發庫,主要是下面這些: 1yum install python-

Scrapy爬蟲小demo總結

訪問 情況 需要 line 架構 方法 pid 說著 () 一、 Scrapy入坑。 a) Scrapy的安裝。 這個沒什麽可講的,網上一大把。 註意的問題,可能我下載的是32位的python,出現了pywin32沒法用的情況,這個直接pip

爬蟲經驗總結

前言 專案組要我爬取一些營養資料,過程曲折,還是有許多體會的,總結一下,防止以後在入坑 注意事項 存取爬取資料時,要保留資料來源的url,以便以後發現數據有誤以後可以矯正 如果插入資料到有外來鍵的資料庫,一定要把所有的插入語句組成一個事務,否則一旦出現異常,資料就

剛入門Python的同學看好了,這是騰訊大牛工作中總結爬蟲經驗

今天主要是說說工作中遇到的: 1.各類反爬蟲 2.一些小技巧 3.我自己常用的爬蟲框架 4.分享搭建一個簡單的代理池 好了,進入正題。 進群進群:943752371可以獲取Python各類入門學習資料! 這是我的微信公眾號【Python程式設計之家】各位大佬用空可以關注下

在進行scrapy爬蟲scrapy-redis爬蟲時會用到的命令總結

1.建立一個scrapy工程 cd scrapy startproject baidu cd scrapy genspider 爬蟲名字 域名 scrapy crawl 爬蟲的name 2.在scrapy爬蟲獲取到資料以後對資料的儲存 scrapy crawl 爬蟲的n

剛入門Python的小夥伴,這是騰訊大牛工作中總結爬蟲經驗

代理 頁面 拖動 for 格式化 運維 cto mil 入職 今天主要是說說工作中遇到的: 1.各類反爬蟲 2.一些小技巧 3.我自己常用的爬蟲框架 4.分享搭建一個簡單的代理池 好了,進入正題。 喜歡python + qun:839383765 可以獲取Python各類免

Python 和 Scrapy 爬蟲框架部署

python scrapy 爬蟲框架 Scrapy 是采用Python 開發的一個快速可擴展的抓取WEB 站點內容的爬蟲框架。安裝依賴 yum install gcc gcc-c++ openssl mysql mysql-server libffi* libxml* libxml2 l

Scrapy 爬蟲框架入門案例詳解

tin mon setting 爬蟲框架 finished perror project 原因 create 歡迎大家關註騰訊雲技術社區-博客園官方主頁,我們將持續在博客園為大家推薦技術精品文章哦~ 作者:崔慶才 Scrapy入門 本篇會通過介紹一

java_web項目開發經驗總結(一)

從數據 簡單 處理 開發 事務 傳輸 記錄 承載 基礎上   web項目就像一個動態的記事本,功能很強大,你最初的項目功能調研越給力,項目所能發揮的作用也就越給力。這是因為web網絡的強聯系性,大家都可以通過訪問到自己想要訪問的頁面,頁面裏既可以承載信息,也可以承載做事情的

scrapy爬蟲框架

cnblogs logs spi down 方式 ges htm width sched downloader:負責下載html頁面 spider:負責爬取頁面內容,我們需要自己寫爬取規則 srapy提供了selector,獲取的方式有xpath,css,正則,extr

html網頁設計細節總結及實踐經驗總結

text 文件路徑 -1 div 提醒 進制的轉換 改換 slice 對話 1) <link rel=” ” type=”text/css” href=”__.css”>是空元素,僅包含屬性。用來定義文檔與外部資源的關系,常用於鏈接樣式表

scrapy爬蟲框架實例之一

獲取 名稱 返回 工程 ima 1-57 response lines star   本實例主要通過抓取慕課網的課程信息來展示scrapy框架抓取數據的過程。  1、抓取網站情況介紹   抓取網站:http://www.imooc.com/course/list  

Python之文件操作:經驗總結

pen bpm files 編碼 判斷目錄 exists 判斷 pri 功能 1、怎麽判斷讀出來的文件是gbk還是utf-8編碼 if content == u‘中國‘.encode(‘gbk‘): return ‘gbk‘ elif content == u‘中國

多年iOS開發經驗總結

pla tostring 技術 draw zed 權限 provide cst gre 1、禁止手機睡眠 [UIApplication sharedApplication].idleTimerDisabled = YES; 2、隱藏某行cell - (CG

Java集合類操作優化經驗總結

設置 mar ise long 初始化 實際類型 線性表 core 不一定 在實際的項目開發中會有非常多的對象,怎樣高效、方便地管理對象,成為影響程序性能與可維護性的重要環節。Java 提供了集合框架來解決此類問題。線性表、鏈表、哈希表等是經常使用的數據結構,在

python爬蟲—使用scrapy爬蟲框架

pywin32 rip for 鏈接 是把 ror sdn 成功 repl 問題1.使用scrapy框架,使用命令提示符pip命令下載scrapy後,卻無法使用scrapy命令,出現scrapy不是內部或外部命令。也不是可運行的程序 解決:一開始,我是把python安裝在

(轉)基於MVC4+EasyUI的Web開發框架經驗總結(5)--使用HTML編輯控件CKEditor和CKFinder

err config 兩個 腳本 web開發 upload asp 正常 初始 http://www.cnblogs.com/wuhuacong/p/3780356.html Web開發上有很多HTML的編輯控件,如CKEditor、kindeditor等等,很多都做的很

(轉)基於MVC4+EasyUI的Web開發框架經驗總結(2)- 使用EasyUI的樹控件構建Web界面

set 應用 get ember trim ase str zab ble http://www.cnblogs.com/wuhuacong/p/3669575.html 最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在用戶體驗和界面設計方面,和Winfor

(轉)基於MVC4+EasyUI的Web開發框架經驗總結(6)--在頁面中應用下拉列表的處理

ica new web開發 don ext images 如果 bob 獲取 http://www.cnblogs.com/wuhuacong/p/3840321.html 在很多Web界面中,我們都可以看到很多下拉列表的元素,有些是固定的,有些是動態的;有些是字典內容,

(轉)基於MVC4+EasyUI的Web開發框架經驗總結(8)--實現Office文檔的預覽

討論 off info code .cn viewer 存在 nco app http://www.cnblogs.com/wuhuacong/p/3871991.html 基於MVC4+EasyUI的Web開發框架經驗總結(8)--實現Office文檔的預覽