Scrapy-02(系列篇3)-爬蟲&雲伺服器定時排程(以京東
原作者是使用BeautifulSoup進行html解析 我覺還是用xpath更方便簡潔一些 於是改寫成了xpath解析 實現的最終效果是一樣的
還有個地方可以提一下
通常都是這麼寫 在items定義好後一個一個賦值上去
可以改成如下更簡潔(這種寫法出自廖雪峰老師的爬蟲教程 也感謝這位老師 )
for field in goods.fields: try: goods[field] = eval(field) except NameError: self.logger.debug("Field is Not Defined " + field) yield goods
這個檔案最簡單了 定義一下就好了 沒什麼說的
這裡MONGO_URL
會在settings.py中申明 實際填的就是伺服器內網IP
一旦填了伺服器內網IP後 上傳到伺服器中執行 是沒有問題的 但在本地是無法跑通測試這個專案的 會報資料庫連線不上的錯誤
要想成功在本地測試專案程式碼 兩種修改:
MONGO_URL改成localhost本地 並且本地要安裝MongoDB並啟動
-
依然連線伺服器中MongoDB 儲存到伺服器的MongoDB資料庫中 不過程式碼上要做如下修改 新增ssh跳轉
下載三方庫sshtunnel 填寫公網IP、使用者名稱、密碼和內網IP 在開啟和關閉資料庫的時候 要新增self.server.start()
和self.server.stop()
其他保持不變 這樣就可以在本地執行爬蟲 並儲存在伺服器中的MongoDB中
注意:若這個專案要上傳到伺服器中 在伺服器中執行 則不用做修改
尤其是在雲伺服器上執行時 要保證爬蟲的健壯穩定
中介軟體需要增加很多異常處理 就要防止爬蟲各種意外排取失敗
常用三招:
-
第一招:隨機使用各種各樣的User-Agent
agents就是一系列User-Agent列表 可自行百度 也可使用如下
agents = [ "Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5", "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1", "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7", "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10", ]
第二招:使用Cookies
這裡不使用Cookies也能抓取 故暫未新增-
第三招:使用代理IP
尤其是京東搜尋遮蔽了阿里雲的IP 所以不得不使用代理IP 要使用代理IP 就需要構建代理池 代理池的構建下一篇再講 這裡直接呼叫已經生成好的代理IP地址
需要匯入各種可能導致異常的方法首先在獲取網頁時就使用代理IP
然後捕獲狀態碼異常 再更換IP 常見的錯誤狀態碼503,110,111(可自行新增) 或者甭管什麼狀態碼只要不是200 就更換IP重連最後還是可能會報異常錯誤如超時錯誤
twisted.internet.error .TimeoutError
等等(免費的代理IP就是問題多) 依然甭管什麼錯 通通更換IP重連 簡單粗暴
爬蟲三招全都用上 基本上都能順利爬取
最後一個檔案 這個就非常簡單
簡單的設定下
預設遵守robots協議 修改為
False
ROBOTSTXT_OBEY = False
開啟中介軟體
DOWNLOADER_MIDDLEWARES = { 'jdGoodsSpider.middlewares.UserAgentMiddleware': 543, 'jdGoodsSpider.middlewares.ProxyMiddleware': 200, }
開啟pipelines
ITEM_PIPELINES = { 'jdGoodsSpider.pipelines.MongoPipeline': 300, }
# 爬取最大頁數MAX_PAGE_NUM = 100#開始頁START_URL = ['%E9%9B%B6%E9%A3%9F&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=lingshi&stock=1&click=0&page=1']#禁止重定向REDIRECT_ENABLED = False#超時時間20sDOWNLOAD_TIMEOUT = 20#下載延遲1sDOWNLOAD_DELY = 1#伺服器mongodb內網IPMONGO_URL = 'mongodb://XXX.XX.XXX.XX/'#資料庫表名MONGO_DB = 'JD'
作者:丨像我這樣的人丨
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/36/viewspace-2818812/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【PhpSelenium】3.定時爬蟲 + 多工爬蟲 + 代理池PHP爬蟲
- [PhpSelenium] 3.定時爬蟲 + 多工爬蟲 + 代理池PHP爬蟲
- 定時排程系列之Quartz.Net詳解quartz
- Go排程器系列(3)圖解排程原理Go圖解
- 京東商品資訊爬蟲爬蟲
- 爬蟲課程爬蟲
- Linux 定時任務排程Linux
- 上天的Node.js之爬蟲篇 15行程式碼爬取京東資源Node.js爬蟲行程
- Python爬蟲爬取淘寶,京東商品資訊Python爬蟲
- Java定時任務排程詳解Java
- Crontab定時任務排程介紹
- 以【某程旅行】為例,講述小程式爬蟲技術爬蟲
- Python 爬蟲系列Python爬蟲
- 爬蟲基礎篇爬蟲
- C#爬蟲與反爬蟲--字型加密篇C#爬蟲加密
- Android 中的定時任務排程Android
- Spring排程定時任務的方式Spring
- DBMS_JOB.SUBMIT 建立job定時排程MIT
- 使用Java實現定時任務排程Java
- 爬蟲(1) - 爬蟲基礎入門理論篇爬蟲
- Python3 大型網路爬蟲實戰 — 給 scrapy 爬蟲專案設定為防反爬Python爬蟲
- python爬蟲系列版Python爬蟲
- golang實現併發爬蟲三(用佇列排程器實現)Golang爬蟲佇列
- 【Python篇】scrapy爬蟲Python爬蟲
- 3分鐘帶你掌握Spring Boot中的定時排程服務Spring Boot
- 利用排程任務定時刪除分割槽
- Go排程器系列(2)巨集觀看排程器Go
- 用海豚排程器定時排程從Kafka到HDFS的kettle任務指令碼Kafka指令碼
- 【Spark篇】---Spark資源排程和任務排程Spark
- python 爬蟲 實現增量去重和定時爬取例項Python爬蟲
- 爬蟲系列 | 6、詳解爬蟲中BeautifulSoup4的用法爬蟲
- 爬蟲案例2-爬取影片的三種方式之一:DrissionPage篇(3)爬蟲
- python定時爬蟲啟用時如何減少記憶體?Python爬蟲記憶體
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- 爬蟲掙錢系列-(完結篇)結構化人名掙錢第三篇爬蟲
- 基於Azkaban的任務定時排程實踐
- laravel框架任務排程(定時執行任務)Laravel框架