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

面向民航售票網站的實時爬蟲系統的設計與實現

2019-06-11 09:33:06郭慧珍劉雨澤梁燁文宋佳音
網絡安全技術與應用 2019年6期
關鍵詞:頁面數據庫用戶

◆郭慧珍 劉雨澤 梁燁文 王 哲 宋佳音

面向民航售票網站的實時爬蟲系統的設計與實現

◆郭慧珍 劉雨澤 梁燁文 王 哲 宋佳音

(中國民航大學計算機科學與技術學院 天津 300300)

近年來,隨著互聯網、大數據、信息化以及電子商務等計算機技術相關領域日新月異的發展,互聯網上存在著大量的可利用的有效信息。隨著這些技術的發展,爬蟲技術也得到了廣泛的應用而快速發展,實現了有效信息快速高效的采集和整合,本文介紹了面向民航售票網站的實時爬蟲系統的設計與實現,供讀者參考。

網絡爬蟲;Scrapy框架;MongoDB數據庫

0 引言

隨著我國綜合國力和人們生活水平的提高,飛機已經成為人們重要的出行方式之一。但是不同于傳統的鐵路運輸方式,很多時候航空公司會提供價格較低的機票,以促進銷售額或為旅客提供性價比更高的服務。但是大多數時候,機票信息紛繁復雜,旅客無法準確及時獲取打折機票的信息。顯然,如何及時有效的整理當前折扣機票,為旅客提供更為直觀、有效的購票信息閱覽體驗成為值得探索的話題。因此,實現信息獲取和整合是我們要完成的主要任務。網絡爬蟲是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本,它們被廣泛用于互聯網搜索引擎或其他類似網站,可以自動采集所有其能夠訪問到的頁面內容,以獲取或更新這些網站的內容和檢索方式。

1 Scrapy框架以及Splash渲染

1.1 Scrapy框架簡介

為了提高系統的效率,同時對多個任務加以控制,在同一時間需要完成多項任務,本系統中使用Scrapy框架來實現多線程。Scrapy是用純Python實現一個為了爬取網站數據、提取結構性數據而編寫的應用框架。Scrapy使用了 Twisted異步網絡框架來處理網絡通訊,可以加快我們的下載速度,不用自己去實現異步框架,并且包含了各種中間件接口,可以靈活完成各種需求[1]。

1.2 Splash渲染和Xpath簡介

Splash是Scrapy官方推薦的JavaScript渲染,它是使用WebKit開發的輕量級無界面瀏覽器,提供基于HTTP接口的JavaScript渲染服務。XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。本系統中,依次,使用Splash渲染技術和xpath提取全部需要的機票相關的數據內容。使用Splash渲染技術,對需要獲取到的票價等機票數據進行分析,當頁面加載完成時需要的機票數據可以被加載出來。下一步,使用XPath提取頁面的信息,以航空公司名稱為例在谷歌瀏覽器使用XPath進行初步提取[2]。

2 MongoDB數據庫

MongoDB是NoSQL(非關系型數據庫)中的一類文檔型數據庫,其數據存儲方式靈活。MongoDB也很好地實現了面向對象的思想,在MongoDB中,每一條記錄都是一個Document對象。MongoDB最大的優勢在于所有的數據持久操作都無須開發人員手動編寫SQL語句,直接調用方法就可輕松實現CRUD操作。MongoDB是本系統中的數據存儲核心,所有爬取的數據都存放在這個數據庫中。將爬蟲爬取到的數據存入到數據庫后,將MongoDB數據庫連接到網頁頁面,根據用戶的輸入需求在頁面上顯示出用戶查找的機票信息,同時用戶可以使用機票的篩選、機票預訂等功能[3]。

3 實時爬蟲系統的分析與設計

系統劃分為網頁分析與數據提取、多線程爬蟲的實現、數據庫存儲、網頁實現四個模塊。其中,網頁分析與數據提取完成的功能是分析并且從網絡中抓取需要的信息;由于機票數據是實時更新的,進而會使用分布式爬取以及定時更新,需要實現多線程爬蟲;從網絡上抓取到我們需要的機票數據節后,需要將數據進行存儲,以方便用戶在填入需要查詢的機票信息時,系統可以從數據庫調度信息反饋給用戶的需求,在系統中加入數據庫存儲模塊;最后,為方便用戶操作以及經過一系列的處理后,系統可以向用戶反饋需要的信息,加入了網頁實現這一模塊。

3.1 爬蟲設計

通過分析,本項目需要爬的數據有航空公司、起始地、目的地、艙位信息、起飛時間、票價信息等內容。編寫爬蟲文件:在系統自動生成文件時,文件中已經設置好的爬蟲的唯一“name”,允許爬取的域名以及初始爬取頁面“start_urls”,文件中的parse方法是用來處理用來處理和抓取數據[4]。

圖1 爬蟲設計圖

3.2 Scrapy框架流程

圖2 Scrapy框架流程圖

首先爬蟲將需要發送請求的url(requests)經引擎交給調度器;排序處理后,經ScrapyEngine, DownloaderMiddlewares(有User_Agent, Proxy代理)交給Downloader;Downloader向互聯網發送請求,并接收下載響應。將響應經ScrapyEngine,可選交給Spiders;Spiders處理response,提取數據并將數據經ScrapyEngine交給ItemPipeline保存;提取url重新經ScrapyEngine交給Scheduler進行下一個循環,直到無Url請求程序停止結束[5]。

3.3 數據庫存儲

為了使機票信息能夠展現給用戶,將爬取到的數據內容全部存入MongoDB數據庫中。使用pymongo第三方包,完成MongoDB數據庫的相關配置,即可將爬蟲爬取到的數據存入到數據庫中,MongoDB數據庫的存儲圖3所示。

圖3 MongoDB數據庫存儲

3.4 實時性高的分布式爬蟲

分布式采用主從結構設置一個Master服務器和多個Slave服務器,Master端管理Redis數據庫和分發下載任務,Slave部署Scrapy爬蟲提取網頁和解析提取數據,最后將解析的數據存儲在同一個MongoDB據庫中,分布式爬蟲架構圖4所示。

圖4 分布式爬蟲構架圖

應用Redis數據庫實現分布式抓取,基本思想是Scrapy爬蟲獲取的到的detail_request的urls都放到Redis Queue中,所有爬蟲也都從指定的Redis Queue中獲取requests,Scrapy-Redis組件中默認使用SpiderPriorityQueue來確定url的先后次序,這是由sorted set實現的一種非FIFO、LIFO方式。因此,待爬隊列的共享是爬蟲可以部署在其他服務器上完成同一個爬取任務的一個關鍵點。此外,在本文中,為了解決Scrapy單機局限的問題,Scrapy將結合Scrapy-Redis組件進行開發,Scrapy-Redis總體思路就是這個工程通過重寫Scrapy框架中的scheduler和spider類,實現了調度、Spider啟動和Redis的交互。實現新的dupefilter和queue類,達到了判重和調度容器和redis的交互,因為每個主機上的爬蟲進程都訪問同一個Redis數據庫,所以調度和判重都統一進行統一管理,達到了分布式爬蟲的目的。

分布式爬蟲問題簡言之就是多臺機器多個 Spider 對多個 url 的同時處理問題,怎樣schedule 這些 url,怎樣匯總 spider 抓取的數據。思路就是把 url 存在某個地方,共享給所有的機器,總的調度器來分配請求,判斷 Spider 有沒有閑置,閑置了就繼續給它任務,直到所有的 url 都爬完,這種方法解決了去重問題,也能提高性能,Scrapy-Redis 就實現了這樣一個完整框架,總的來說,這更適合廣度優先的爬取。結合web和數據庫知識,建立網頁和數據庫,為用戶一套提供完整的實時性高的分布式爬蟲系統[6]。

4 實現

4.1 網站分析與數據提取的實現

以驢媽媽旅游網為例,該系統需要獲取到相關的機票數據有:航空公司、航班號、起飛降落時間、航站樓信息、票價等。接下來,對需要獲取到的機票數據進行分析,使用Splash渲染技術,當頁面加載完成時需要的機票數據可以被加載出來。下一步,使用XPath提取頁面的信息,以航空公司名稱為例在Chrome瀏覽器使用XPath進行初步提取,如圖6所示,可以提取到航空公司的信息。依次,使用Splash渲染技術和XPath提取全部需要的機票相關的數據內容。

圖6 xpath提取數據圖

4.2 多線程爬蟲的實現

頁面分析與數據提取完成以后,將需要提取的數據寫入項目的items.py文件,完成settings文件中相關的配置以及完成項目中數據提取的爬蟲文件。項目已初步完成,運行該爬蟲查看爬取的結果,如圖7所示。但是由于機票數據是實時更新的,進而會使用分布式爬蟲以及定時更新,將用戶的需求加入URL隊列進行爬取,并且使用Linux下的crontab命令完成定時爬取數據。

4.3 數據庫存儲的實現

為了使機票信息能夠展現給用戶,將爬取到的數據內容全部存入MongoDB數據庫中。完成爬蟲爬取以后,將爬取到的數據存入到數據庫中。在MongoDB數據庫中,存入的數據如圖8所示。

圖7 部分爬取數據圖

圖8 MongoDB數據庫存儲圖

4.4 網頁實現

數據存入數據庫后,要將數據通過網頁的形式展現給使用方。將MongoDB數據庫連接到網頁頁面,根據用戶的輸入需求在頁面上顯示出用戶查找的機票信息以及訂該票的網站,同時用戶可以使用機票的篩選、跳轉預訂機票網站等功能。

5 結束語

本次面向民航網站的爬蟲系統的設計與實現中通過Python語言+Scrapy框架、Splash渲染、MongoDB數據庫和Web技術等實現了分布式爬蟲。基本能夠實現對當前折扣機票等信息的整理,為旅客提供更為直觀、有效的購票信息閱覽體驗。

[1]劉碩.精通Scrapy網絡爬蟲[M].清華大學出版社,2018.

[2]https://www.jianshu.com/p/4052926bc12c.

[3]李典桐.用于機票預訂的垂直搜索引擎的設計與實現[D].云南大學,2015.

[4]李琳.基于Python的網絡爬蟲系統的設計與實現[J].信息通信,2017,(09):26-27.

[5]王芳,張睿,宮海瑞.基于Scrapy框架的分布式爬蟲設計與實現[J].信息技術,2019(03):96-10.

[6]華云彬,匡芳君.基于Scrapy框架的分布式網絡爬蟲的研究與實現[J].智能計算機與應用,2018,8(05):46-50.

面向民航售票網站的爬蟲系統設計與實現(編號:IECAUC2018015)。

猜你喜歡
頁面數據庫用戶
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
如何獲取一億海外用戶
創業家(2015年5期)2015-02-27 07:53:25
主站蜘蛛池模板: 国产成人高清亚洲一区久久| 亚洲综合狠狠| 国产精品第一区在线观看| 高清乱码精品福利在线视频| 精品成人一区二区三区电影 | 18禁高潮出水呻吟娇喘蜜芽| 2021最新国产精品网站| 国产欧美精品一区二区| 亚洲精品中文字幕无乱码| 国产手机在线小视频免费观看| 日韩精品毛片人妻AV不卡| 97se亚洲综合在线| 依依成人精品无v国产| 97国产成人无码精品久久久| 亚洲精品777| 欧美国产日产一区二区| 亚洲成年网站在线观看| 亚洲天天更新| 在线播放国产一区| 天堂岛国av无码免费无禁网站| 国产精品一老牛影视频| 91在线高清视频| 亚洲国产av无码综合原创国产| 精品无码国产自产野外拍在线| 欧美va亚洲va香蕉在线| 中文字幕va| 欧美综合一区二区三区| 国产精品白浆在线播放| 国产成a人片在线播放| 美女高潮全身流白浆福利区| 国产成人在线无码免费视频| 免费国产好深啊好涨好硬视频| 国产熟睡乱子伦视频网站| 国产亚洲精品资源在线26u| 一级毛片免费高清视频| 久久综合九色综合97婷婷| 亚洲精品无码抽插日韩| 六月婷婷激情综合| 亚洲最大福利视频网| 激情综合网激情综合| 久久综合结合久久狠狠狠97色| 国产一在线观看| 国产91透明丝袜美腿在线| 日韩在线视频网| 国产精品漂亮美女在线观看| 国产69精品久久| 日本精品视频一区二区| 国产超碰在线观看| 亚洲综合色区在线播放2019| 日韩欧美在线观看| 性网站在线观看| 欧美伊人色综合久久天天| 青草91视频免费观看| 日韩在线欧美在线| 精品小视频在线观看| 亚洲天堂精品在线| 伊人婷婷色香五月综合缴缴情| 高清码无在线看| jijzzizz老师出水喷水喷出| 国产一级毛片在线| 伊人久久福利中文字幕| 欧美日韩激情在线| 国产91全国探花系列在线播放| 国产精品网址在线观看你懂的| 色婷婷综合激情视频免费看| 老司机精品久久| 免费国产在线精品一区| 女人18毛片一级毛片在线| 国产美女自慰在线观看| 午夜限制老子影院888| 亚洲男人在线| 色噜噜在线观看| 91色综合综合热五月激情| 尤物特级无码毛片免费| 日韩小视频在线播放| 91www在线观看| 日本免费一级视频| 伊人精品成人久久综合| 色婷婷亚洲综合五月| 国产成人a毛片在线| www.99在线观看| 一区二区偷拍美女撒尿视频|