Scrapy-02(系列篇3)-爬蟲&雲伺服器定時排程(以京東

Jack2k發表於2021-09-09


原作者是使用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章