999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Scrapy的分布式爬蟲采集軟件的實現

2019-09-19 11:34:52翁紹菲廖翔宇祝光儀范雅靜甘宇健
電腦知識與技術 2019年20期

翁紹菲 廖翔宇 祝光儀 范雅靜 甘宇健

摘要:近年來,隨著互聯網的迅速發展,人們對于數據的挖掘與應用越來越重視。為了讓程序自動瀏覽互聯網中的海量網頁,把用戶需要的信息進行收集整理,轉化成便于閱讀的形式并存儲起來,方便用戶的理解和使用。研究了分布式爬蟲和Scrapy框架,將Scrapy和Redis相結合,設計并實現了一個基于Scrapy框架的分布式網站采集系統。結果表明該系統操作簡單,可以降低編寫爬蟲的難度,同時分布式的采用也提高了爬蟲采集的效率。

關鍵詞:爬蟲軟件;C#;Scrapy框架;分布式;Redis

中圖分類號:TP311? ? ? 文獻標識碼:A

文章編號:1009-3044(2019)20-0073-03

開放科學(資源服務)標識碼(OSID):

Abstract: In recent years, with the rapid development of the Internet, people are paying more and more attention to the mining and application of data. To make the program automatically browse the massive web pages on the Internet, and collect the information needed by users and then convert it into a form that is easy to read and store, so than it can convenient for people to understand and use. distributed crawler and Scrapy framework is studied, A distributed website collection system by combine the Scrapy and Redis is designed and implemented . The result shows that the system is simple to operate, which can reduce the difficulty of writing crawler script, and that the distributed structure improves the efficiency.

Key words: crawler; C#; Scrapy; distributed system; Redis

1 背景

在如今這個大數據的時代,人們手動利用搜索引擎來尋找大量特定數據效率極低,而且針對性差,無法進行系統的處理和展示。如果能夠將互聯網中的龐大的信息數據收集起來,經過數據挖掘、數據清洗和數據分析后,它們可以變成具有參考和借鑒價值的信息,為人們提供靈感來源或決策參考的數據支持。因此,如何高效準確地獲取所需的信息數據資源成為一個極其關鍵的問題。

本文研究的主要內容是設計并實現一個分布式爬蟲采集軟件,該軟件能夠適用于絕大多數的網站。即使非技術人員也可以通過簡單的學習和分析輕松運用本軟件爬取簡單的目的信息數據;對于專業人士而言,本系統可以減輕他們的工作量。

2 研究現狀

隨著20世紀90年代搜索引擎的出現,網絡爬蟲也隨之出現。網絡爬蟲,又被稱為網頁蜘蛛,是一種根據設定的規則,自動地抓取網頁信息的程序或者腳本[1]。隨著分布式網絡爬蟲的出現,爬取效率得到了很大的提高。分布式網絡爬蟲可以看成是由多個集中式網絡爬蟲構成, 分布式系統中的每個節點都可以看作一個集中式網絡爬蟲[2],Web Gather和Google搜索引擎所使用的網絡爬蟲系統就是分布式的爬蟲?,F在網絡爬蟲已經深入到了生活中的各個領域,如在金融方面徐翔等博士編寫設計的網絡爬蟲可用來分析網絡輿情與上證指數漲跌幅的關聯性[3];農業方面劉曉剛教授開發了網絡爬蟲進行網上農產品的大數據抓取[4]。

3 工具簡介

3.1 Scrapy

Scrapy是Python開發的一個快速、高層次的屏幕抓取和WEB抓取框架,用于抓取WEB站點并從頁面中提取結構化的數據。Scrapy用途廣泛,可以用于數據挖掘、監測和自動化測試[5]。

3.2 Scrapy-redis

Scrapy-Redis是使用Scrapy框架和Redis數據庫工具組合實現的一個網絡分布式抓取開源項目[6]。雖然Scrapy框架本身并不支持分布式爬蟲,但是搭載了Redis數據庫后形成的Scrapy-Redis模式可以很好的解決這個問題,它的原理是將Scrapy自身待抓取的網頁URL隊列替換成Redis的數據庫內的隊列,使得要爬取的請求存放在同一個Redis服務器。開始分布式任務后,多個爬蟲程序便可以去同一個Redis的數據庫里獲取請求隊列的URL,分別采集任務,再把數據存入同一個Redis數據庫里。

4 系統總體設計

本軟件是一個簡單易操作的爬蟲采集軟件,使用了熱門的框架和技術,親和性適用性強,運行和維護不需要太多的成本;建立任務過程簡單易學,無需太多人力投入。

軟件分成三個模塊,系統框架圖如圖1所示。C#窗體程序負責和用戶的交互,Scrapy-Redis框架負責爬取數據,Redis數據庫和用戶指定數據庫負責存儲數據。系統的任務由一個至多個層構成,每一層是一個獨立的方法,代表一個邏輯層的網頁。在每一層里,可以通過添加不同屬性的Xpath等信息爬取該層網頁中的不同內容。通過添加網站的起始URL、層Xpath和每層的屬性信息,系統將自動生成爬蟲來采集網頁并將采集到的內容存入數據庫。

4.1 交互層——窗體模塊設計

交互層主要負責軟件操作頁面展示和進行人機交互。系統的設計可以分為四個模塊:主頁面模塊、創建與編輯任務視圖模塊、服務端視圖模塊和客戶端視圖模塊。

1)主頁面模塊,使用者可以查看所有任務的信息列表,具體包括每個任務的任務名、采集網址、模式(單任務、分布式)、類型(服務器/客戶端/單機)、狀態、開啟時間等信息。針對每個任務,使用者可以選擇對其進行開始、暫停、停止、編輯、前往根目錄等操作。

2)創建與編輯任務視圖模塊,使用者可對任務進行模式選擇,填寫任務基礎信息和編輯任務的操作。編輯任務的界面分為可視化界面和代碼界面。在可視化界面,用戶可以通過一些可視化的操作增刪改查爬蟲的層和每層的屬性信息,選擇該層爬蟲是否需要分頁處理;在代碼界面,用戶可以預覽生成的代碼。經過一些可視化的流程和少量修改,使用者可完成針對性的爬取任務。

3)服務端視圖模塊,使用者可以監聽客戶端接入請求、查看各個已接入客戶端的信息、開啟Redis數據庫監聽、將任務發送至客戶端、開啟和停止采集任務。

4) 客戶端視圖模塊,使用者可以通過客戶端視圖模塊查看是否成功連接服務端,接收服務器任務和開始客戶端采集任務。

4.2 邏輯業務層——爬蟲模塊設計

邏輯業務層是本系統的核心,它主要用于實現對具體業務的操作,在本例中主要用于實現根據交互層提交的任務數據進行爬蟲生成,網站爬取然后將采集結果存入數據庫。

爬蟲提取網頁內容的核心方法主要有Beautifulsoup、正則表達式和Xpath三種。Beautifulsoup是Python自帶的一個Html的解析庫,它的優點是更符合人們直觀理解的語義。系統將需要分頁的頁面使用BeautifulSoup解析 “下一頁”字段所對應的URL地址,如果沒有對應的完整網址,則將任務的采集網址和找到的URL地址的組合作為下一重的URL地址。正則表達式是對字符串進行過濾處理的一種邏輯公式,雖然正則表達式能使爬蟲處理速度更快,并且比起Xpath功能更為強大,但它復雜且容易出錯,增加普通人的學習難度和使用難度。Xpath 是一門在 XML 文檔中查找信息的語言, 靈活易學,便于非編程人員的學習及使用。綜上考慮本系統將采用Xpath作為系統的爬取核心[7]。

4.3 數據庫層設計

數據庫層用于實現系統對數據庫的操作,本例中主要體現在系統自動創建數據庫、刪除數據庫和將數據插入數據庫的操作。為了方便用戶信息存儲,系統需要在爬蟲存儲模塊創建一個原始數據庫,使得用戶只需將數據庫類型、數據庫名、帳號、密碼填入配置文件,運行代碼后系統會自動在目標數據庫自動創建表和存入信息。系統為每個任務的每層創建一個單獨的表,創建表的表名為任務名_層數,表中每一列的字段名為任務的屬性名稱。這種結構有利于直觀的區分每一層和顯示每一層的表單數據。

5 系統主要實現

5.1 爬蟲腳本

系統使用Python作為開發爬蟲的語言。爬蟲主要使用Scrapy-Redis框架,除了解決了分布式處理的難題,這種框架最大的優點還有方便的去重處理和程序中斷處理。由于URL存放在同一個服務端,服務端可以經過統一去重后再分配給各個客戶端進行抓取,并且,當程序出現中斷后,數據庫中仍存在請求隊列, 當系統再次啟動時任務將會繼續爬取[8]。

對于爬取動態JS處理的網頁,系統采用無頭瀏覽器抓取單個網頁并進行渲染,解決了傳統HTTP爬蟲抓取單頁應用難以處理異步請求的問題[9]。為了提升爬取頁面爬蟲的運行速度,代碼默認是禁用Css圖片的,如需加載,手動將相應代碼刪掉即可。

5.2 窗體程序搭建

軟件使用C/S架構。服務器和客戶端之間通過Socket進行數據傳輸。Socket是一個網絡通信接口,它采用的TCP/IP協議可以唯一的標識網絡中的一個進程,使得服務器可以安全準確地傳輸數據至客戶端[10]。

交互界面使用C#窗體程序進行開發。系統開始任務后將解析編輯文件過程生成的Xml格式任務數據和原始的爬蟲代碼相結合,利用字符串處理技術自動生成目標爬蟲代碼,調用Cmd執行命令執行爬蟲程序。執行完任務后,任務狀態將更新為已完成,同時數據庫獲得爬蟲程序存入的對應任務采集數據。

5.3 數據庫層的實現

為了提高數據的安全性,防止誤刪,也為了便于分布式系統的存儲,系統采用Redis數據庫和用戶設計數據庫并行儲存系統爬取下來的數據。配置完數據庫的文件后,爬蟲存儲模塊通過調用已編寫封裝好的DLL(動態鏈接庫文件)來幫助創建和存入數據庫。基于數據庫兼容性的考慮,系統支持TXT文本和Mysql、SqlServer等數據庫。

6 結束語

這套系統,可在通過一些可視化的操作后,完成爬蟲的爬取。使用它用戶可以更加簡單快捷地爬取網站。同時,爬蟲的設計基本上解決了一般爬蟲的去重、分頁處理、動態JS加載、存入數據庫等問題,滿足了爬蟲人員的一般需要。分布式爬蟲的功能解決了單臺機器爬取大型網站速度慢的問題。未來還將繼續完善本系統的研究,解決初始數據庫設計缺陷、反爬蟲處理等問題。

參考文獻:

[1] 百度百科. 網絡爬蟲[EB/OL]. [2019-04-17]. https://baike.baidu.com/item/網絡爬蟲/5162711?fr=aladdin.

[2] 劉洋, 崔翠, 李立新. 一種基于python語言的網絡爬蟲研究[EB/OL].https://www.xzbu.com/8/view-7493419.htm.

[3] 徐翔, 靳菁, 呂偉欣. 網絡輿情作為社會傳感器對股票指數的影響——基于LDA主題模型的挖掘分析[J]. 財務與金融, 2018(6): 1-9.

[4] 劉曉剛. 農產品大數據的抓取和分析方法探索[J]. 農村經濟與科技, 2018, 29(19): 304-305.

[5] 百度百科. Scrapy[EB/OL]. [2018-12-05].https://baike.baidu.com/item/scrapy/7914913?fr=aladdin.

[6] 鄧萬宇, 劉光達, 董瑩瑩. 一種基于Scrapy-Redis的分布式微博數據采集方案[J]. 信息技術, 2018(11): 59-62.

[7] lingojames. python爬蟲里信息提取的核心方法: Beautifulsoup、Xpath和正則表達式[EB/OL]. [2017-06-01] https://blog.csdn.net/lingojames/article/details/72835972.

[8] 黎玉香, 于偉. 分布式網絡爬蟲系統的基本原理與實現[J]. 花炮科技與市場, 2018(4): 45.

[9] 褲褲他爸. 2018-08-16面試題-無頭瀏覽器[EB/OL]. [2018-08-16] https://www.jianshu.com/p/35a9e566e6d6.

[10] Xiao__Tian_. 基于TCP協議的網絡通信(socket編程)[EB/OL]. [2016-07-28] https://blog.csdn.net/xiao__tian__/article/details/52050863.

【通聯編輯:謝媛媛】

主站蜘蛛池模板: 国产精欧美一区二区三区| 亚洲综合日韩精品| 五月婷婷精品| 欧美精品1区| 国产毛片基地| 好久久免费视频高清| 精品三级网站| 爱爱影院18禁免费| 九色视频一区| 国产丰满大乳无码免费播放| 思思99热精品在线| 黄色免费在线网址| 国产亚洲精久久久久久无码AV| 国产区91| 亚洲国产高清精品线久久| 青青草原偷拍视频| 色呦呦手机在线精品| 亚洲精品无码日韩国产不卡| 秋霞午夜国产精品成人片| 无码视频国产精品一区二区| 超清无码一区二区三区| 美女内射视频WWW网站午夜 | 九色综合视频网| 久操中文在线| 精品国产自| 亚洲国产精品一区二区第一页免| 好久久免费视频高清| 亚洲区第一页| 久久久久青草大香线综合精品| 欧美无专区| 国产欧美日韩免费| 中文字幕久久波多野结衣| 伊人激情久久综合中文字幕| 一级毛片在线播放免费观看| 欧美a在线看| 日韩无码视频播放| 亚洲精品色AV无码看| 亚洲国产高清精品线久久| 55夜色66夜色国产精品视频| 亚洲黄色成人| 成人午夜免费观看| 国产xx在线观看| 国产电话自拍伊人| 欧美黄网在线| 亚洲av中文无码乱人伦在线r| 黄色网页在线播放| 666精品国产精品亚洲| 亚洲人成人伊人成综合网无码| 午夜老司机永久免费看片| 青青青视频蜜桃一区二区| 亚洲美女视频一区| 国产精品自在拍首页视频8| 久久这里只有精品国产99| 三上悠亚在线精品二区| 蜜臀AVWWW国产天堂| 激情综合网激情综合| 欧美亚洲国产精品第一页| 国产99视频精品免费观看9e| 亚洲有无码中文网| 114级毛片免费观看| 亚洲丝袜中文字幕| 国产高清无码第一十页在线观看| 亚洲人成影视在线观看| 无码网站免费观看| 5555国产在线观看| 91网址在线播放| jizz亚洲高清在线观看| 71pao成人国产永久免费视频| 欧美成人在线免费| www精品久久| 亚洲,国产,日韩,综合一区 | 亚洲IV视频免费在线光看| 免费国产高清精品一区在线| 精品色综合| 超薄丝袜足j国产在线视频| 国产三级a| 美女一区二区在线观看| 日韩精品一区二区三区swag| 国内毛片视频| 国产在线专区| 欧美午夜视频在线| 国产在线无码av完整版在线观看|