91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python爬蟲中的Pyspider如何使用

發布時間:2020-09-10 16:16:03 來源:億速云 閱讀:429 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關Python爬蟲中的Pyspider如何使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1 簡介

pyspider 是一個支持任務監控、項目管理、多種數據庫,具有 WebUI 的爬蟲框架,它采用 Python 語言編寫,分布式架構。詳細特性如下:

·擁有 Web 腳本編輯界面,任務監控器,項目管理器和結構查看器;

·數據庫支持 MySQLMongoDBRedis、SQLite、Elasticsearch、PostgreSQL、SQLAlchemy;

·隊列服務支持 RabbitMQ、Beanstalk、Redis、Kombu;

·支持抓取 JavaScript 的頁面;

·組件可替換,支持單機、分布式部署,支持 Docker 部署;

·強大的調度控制,支持超時重爬及優先級設置;

·支持 Python2&3。

pyspider 主要分為 Scheduler(調度器)、 Fetcher(抓取器)、 Processer(處理器)三個部分,整個爬取過程受到 Monitor(監控器)的監控,抓取的結果被 Result Worker(結果處理器)處理。基本流程為:Scheduler 發起任務調度,Fetcher 抓取網頁內容,Processer 解析網頁內容,再將新生成的 Request 發給 Scheduler 進行調度,將生成的提取結果輸出保存。

2 pyspider vs scrapy

·pyspider 擁有 WebUI,爬蟲的編寫、調試可在 WebUI 中進行;Scrapy 采用采用代碼、命令行操作,實現可視化需對接 Portia。

·pyspider 支持使用 PhantomJS 對 JavaScript 渲染頁面的采集 ;Scrapy 需對接 Scrapy-Splash 組件。

·pyspider 內置了 PyQuery(Python 爬蟲(五):PyQuery 框架) 作為選擇器;Scrapy 對接了 XPath、CSS 選擇器、正則匹配。

·pyspider 擴展性弱;Scrapy 模塊之間耦合度低,擴展性強,如:對接 Middleware、 Pipeline 等組件實現更強功能。

總的來說,pyspider 更加便捷,Scrapy 擴展性更強,如果要快速實現爬取優選 pyspider,如果爬取規模較大、反爬機制較強,優選 scrapy。

3 安裝

3.1 方式一

pip install pyspider

這種方式比較簡單,不過在 Windows 系統上可能會出現錯誤:Command "python setup.py egg_info" failed with error ...,我在自己的 Windows 系統上安裝時就遇到了該問題,因此,選擇了下面第二種方式進行了安裝。

3.2 方式二

使用 wheel 方式安裝。步驟如下:

·pip install wheel 安裝 wheel;

·打開網址 https://www.lfd.uci.edu/~gohlke/pythonlibs/,使用 Ctrl + F 搜索 pycurl,根據自己安裝的 Python 版本,選擇合適的版本下載,比如:我用的 Python3.6,就選擇帶有 cp36 標識的版本。如下圖紅框所示:

Python爬蟲中的Pyspider如何使用

·使用 pip 安裝下載文件

·最后還是使用 pip install pyspider 安裝。

執行以上安裝步驟后,我們在控制臺輸入 pyspider,如圖所示:

Python爬蟲中的Pyspider如何使用

出現上述結果說明啟動成功,如果啟動時一直卡在 result_worker starting...,我們可以再打開一個控制臺窗口,同樣輸入 pyspider 進行啟動,啟動成功后關掉之前的窗口即可。

啟動成功后,我們再驗證一下,打開瀏覽器,輸入 http://localhost:5000 訪問,如圖所示:

Python爬蟲中的Pyspider如何使用

我們發現確實啟動成功了。

4 快速上手

4.1 創建項目

首先,我們點擊圖形界面中的 Create 按鈕開始創建項目,如圖中紅框所示:

Python爬蟲中的Pyspider如何使用

然后會跳出信息填寫窗口,如圖所示:

Python爬蟲中的Pyspider如何使用

·Project Name:項目名

·Start URL(s):爬取鏈接地址

我們需要填寫 Project Name 和 Start URL(s),這里以鏈家網二手房信息為例:https://hz.lianjia.com/ershoufang/,填寫完成后點擊 Create 按鈕。結果如圖所示:

Python爬蟲中的Pyspider如何使用

4.2 爬蟲實現

pyspider 訪問 https 協議的網站時會提示證書問題(通常為 HTTP 599),因此我們需要在 crawl 方法中添加參數 validate_cert=False 來屏蔽證書驗證。如圖所示:

Python爬蟲中的Pyspider如何使用

我們計劃獲取房子的單價(unit_price)、描述標題(title)、賣點信息(sell_point),編寫具體實現如下所示:

from pyspider.libs.base_handler import *
class Handler(BaseHandler):
    crawl_config = {
    }
    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl('https://hz.lianjia.com/ershoufang/', callback=self.index_page,validate_cert=False)
    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc('.title').items():
            self.crawl(each.attr.href, callback=self.detail_page,validate_cert=False)
            
    @config(priority=2)
    def detail_page(self, response):
        yield {
            'unit_price':response.doc('.unitPrice').text(),
            'title': response.doc('.main').text(),
            'sell_point': response.doc('.baseattribute > .content').text()
        }

·@every(minutes=24 * 60):通知 Scheduler 每天運行一次。

·@config(age=10 * 24 * 60 * 60):設置任務的有效期限。

·@config(priority=2):設定任務優先級

·on_start(self):程序的入口。

·self.crawl(url, callback):主方法,用于創建一個爬取任務。

·index_page(self, response):用來抓取返回的 html 文檔中對應標簽的數據。

·detail_page(self, response):返回一個 dict 對象作為結果。

我們點擊運行按鈕,點擊之后,我們發現 follows 按鈕處出現了提示信息,如圖所示:

Python爬蟲中的Pyspider如何使用

點擊 follows 按鈕,結果如圖所示:

Python爬蟲中的Pyspider如何使用

點擊上圖中紅框圈起來的三角號按鈕,結果如圖所示:

Python爬蟲中的Pyspider如何使用

我們隨意選一條 detail_page,點擊其右側三角號按鈕,結果如圖所示:

Python爬蟲中的Pyspider如何使用

從結果來看,已經可以爬取到我們需要的信息了。

4.3 數據存儲

獲取到信息之后,需要將信息存儲起來,我們計劃將數據存儲到 MySQL 數據庫。

首先,安裝 pymysql,命令如下:

pip install pymysql

接著添加保存代碼,完整代碼如下:

from pyspider.libs.base_handler import *
import pymysql
class Handler(BaseHandler):
    crawl_config = {
    }
    def __init__(self):
        # 下面參數修改成自己對應的 MySQL 信息 
        self.db = MySQLdb.connect(ip, username, password, db, charset='utf8')
             
    def add_Mysql(self, title, unit_price, sell_point):
        try:
            cursor = self.db.cursor()
            sql = 'insert into house(title, unit_price, sell_point) values ("%s","%s","%s")' % (title[0],
            unit_price[0],sell_point);  
            print(sql)
            cursor.execute(sql)
            self.db.commit()
        except Exception as e:
            print(e)
            self.db.rollback()
    
    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl('https://hz.lianjia.com/ershoufang/', callback=self.index_page,validate_cert=False)
    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc('.title').items():
            self.crawl(each.attr.href, callback=self.detail_page,validate_cert=False)
    @config(priority=2)
    def detail_page(self, response):
        title = response.doc('.main').text(),
        unit_price = response.doc('.unitPrice').text(),
        sell_point = response.doc('.baseattribute > .content').text()
        self.add_Mysql(title, unit_price, sell_point)
        yield {
            'title': response.doc('.main').text(),
            'unit_price':response.doc('.unitPrice').text(),
            'sell_point': response.doc('.baseattribute > .content').text()
        }

先測試一下是否能將數據保存到 MySQL 中,還是選一條 detail_page,如圖所示:

Python爬蟲中的Pyspider如何使用

點擊其右側三角號按鈕,結果如圖所示:

Python爬蟲中的Pyspider如何使用

從輸出結果來看是執行了保存操作,我們再到 MySQL 中看一下,如圖所示:

Python爬蟲中的Pyspider如何使用

數據已經存到了 MySQL 中了。

上面我們是手動操作保存的數據,接下來看一下如何通過設置任務保存。

點擊當前頁左上角的 pyspider 按鈕,如圖所示:

Python爬蟲中的Pyspider如何使用

返回 dashboard 界面,如圖所示:

Python爬蟲中的Pyspider如何使用

我們點擊 status 下方紅框圈住的位置,將狀態修改為 RUNNING 或 DEBUG,然后點擊 actions 下方的 run 按鈕即可。

上述就是小編為大家分享的Python爬蟲中的Pyspider如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通山县| 乡城县| 木里| 三河市| 阿鲁科尔沁旗| 哈巴河县| 马尔康县| 牡丹江市| 互助| 茌平县| 清苑县| 兴安县| 吴江市| 兴仁县| 友谊县| 蒙山县| 玉溪市| 阿克苏市| 惠安县| 海口市| 城固县| 东城区| 永安市| 乐平市| 吉安县| 阳原县| 会宁县| 台州市| 河津市| 木里| 百色市| 沁阳市| 崇明县| 海淀区| 元谋县| 遵义市| 青冈县| 贵阳市| 拜泉县| 琼海市| 桐梓县|