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

Python框架下基于主題的數據爬取技術研究與實現

2018-01-04 11:35:20嚴斐肖璞
計算機時代 2018年11期

嚴斐 肖璞

摘 要: 如今上網查詢和購物已經成為人們的生活必需。由于在很多系統上查看商品或資源需要點擊跳轉多個頁面,隨著瀏覽時間的增加,經常會出現眼花繚亂的感覺。若只為用戶呈現必要的數據,必將提高篩選資源的效率。文章使用Python語言結合目前流行的Spring MVC框架來爬取目標網站的數據,設計了數據爬取模塊和數據展示模塊,實現了基于主題的爬蟲框架。通過爬取實驗與結果測試,成功爬取到了目標網站的數據并展示到自己的頁面上,實現了預期的目標。

關鍵詞: 數據爬取; 基于主題;爬蟲; SpringMVC

中圖分類號:TP311 文獻標志碼:A 文章編號:1006-8228(2018)11-10-04

Abstract: Nowadays, online enquiries and shopping have become the indispensable of people's daily life. Because viewing goods or resources on many systems requires clicking and jumping over multiple pages, it is often a dazzling feeling as browsing time increases. If only provide users with the necessary data, the efficiency of screening resources will certainly be improved. Combining with the popular Spring MVC framework, this paper uses Python language to crawl the data of the target website, designs the data crawling module and data display module, and implements the theme-based crawler framework. The crawling experiment and the test result show that, the data of the target website is crawled and displayed on its own page, and the expected goal is achieved.

Key words: data crawling; theme-based; crawler; Spring MVC

0 引言

互聯網的快速發展使得互聯網的數據變得又多又雜,人們無法在一張頁面上獲取到盡可能多的數據。因此,爬取不同網頁上的更多的數據已經成為了一種趨勢。本文的研究目的就是盡可能多的從目標網站上爬取自己想要的信息來提高獲取有用信息的效率。

隨著技術的不斷發展,各個網站的反爬蟲機制也日漸成熟,市面上所存在的一些爬蟲程序已經不能正確的爬取到用戶想要的信息。因此,一個能正確爬取數據的爬蟲項目也是市場上所需要的[1]。

本文研究的內容是如何從目標網頁上爬取自己想要的信息。目前Python作為一門易學習,易入手的編程語言受到越來越多程序員的青睞。本文選用Python作為爬取技術的編程語言,調用其中較成熟的庫如BeautifulSoup庫,Requests庫和Scrapy庫,再配合Mysql數據庫。數據展示方面配合Spring、MyBatis、Spring MVC三大框架將爬取到的數據展示到所需的頁面上。

1 爬蟲框架介紹

1.1 Scrapy庫介紹

Scrapy是一個Python著名的爬蟲框架,如圖1所示。該框架使用了Downloader抓取數據,只需要指定被抓取的url,將抓取的內容放進Item Pipeline,由客戶進行自定義的處理。Scrapy框架封裝了下載和調度等過程,方便了爬蟲的編寫。

⑴ Scrapy Engine:負責Spider,ItemPipline,Downloader,Scheduler中的通訊,信號,數據傳遞等。

⑵ Scheduler:負責接收引擎發送過來的Request請求,按照一定的順序整理,入隊再還給引擎。

⑶ Downloader:下載Scrapy Engine發送的所有的request請求并將獲取到的Responses還給Scrapy Engine,由Spider來處理。

⑷ Spiders:負責處理所有的Response請求并分析數據,提取Item需要的數據,將后繼的URL交給引擎并再次進入Scheduler。

⑸ ItemPipeline:負責處理Spider獲取到的Item,進行后期處理。

1.2 Scrapy框架的運作流程

⑴ 需要明確一個目標網站,第一個將要被處理的URL將會由Spider發送給引擎(Scrapy Engine)。

⑵ 引擎(Scrapy Engine)將會通知調度器(Scheduler)將一些request請求入隊。調度器(Scheduler)處理好之后再還給引擎(Scrapy Engine)。

⑶ 引擎(Scrapy Engine)將通知下載器(Downloader)下載request請求中需要的信息。如果下載失敗,引擎(Scrapy Engine)將會通知調度器記錄,等全部完成后再次下載。

⑷ 下載完的內容將返回給Spider由用戶自定義處理。此時,Spider會獲取以下信息:一是需要跟進的URL,二是獲取到的Item數據。

⑸ 引擎(Scrapy Engine)通知管道(Item Pipeline)處理獲取到的Item數據。同時還要通知調度器(Scheduler)跟進URL。

最后循環工作,直到獲取完所有需要的數據結束工作。

1.3 BeautifulSoup庫與Requests庫

BeautifulSoup庫與Requests庫作為Python爬蟲最常用的兩個庫現已被開發者廣泛使用。BeautifulSoup庫是一中靈活方便的解析庫,它處理高效并且支持許多的解析器。我們只需導入該庫,直接調用其中的函數就可以找到所需要的信息。對于一些前端頁面代碼較為復雜的網站,BeautifulSoup庫可以很大程度地減少程序員編寫代碼的時間。

Requests是一個很實用的HTTP客戶端庫,編寫爬蟲類的項目基本都會使用到它。它具有一些很好的特性:第一,給目標URL后添加參數時不需要手動構造新的URL,方便且避免了許多低級錯誤。第二,Requests庫中的session函數可以自動保存cookies,設置請求參數,下次請求時可以自動帶上請求的參數。第三,Requests庫支持流式上傳,支持上傳較大的文件或者數據而無需先把它們放進內存中。

2 目標網站爬蟲設計

2.1 目標網站的確定與進入

目前現有的爬蟲能帶給我們很多的開發經驗與注意事項[2-6]。本次研究選取的目標網站是對爬蟲比較友好的豆瓣網,主題是爬取豆瓣網上讀書標簽下的圖書并且按照該圖書的評分依次存儲下來。

首先,我們使用火狐瀏覽器打開豆瓣網,任選一個關于主題的圖書頁面點擊進入。嘗試更換主題,我們發現豆瓣網的URL是有規律的。如圖2和圖3所示。

基本確定URL的改變規律為:tag后面為所需要的主題,主題后面緊跟著類型資源,如果是book就顯示圖書,如果是source就是顯示的各種資源。

其次,可以發現豆瓣網站圖書頁面是分頁的并且每個頁面只展示15個資源。點擊第二頁,發現頁面的URL發生了如下變化,具體變化如圖4和圖5所示。

至此,本文基本確定了頁面URL的變化規律,首次進入頁面時由于是第一頁所以start參數為0,不顯示。第二頁開始start每次增加15代表每頁只展示15個資源。

2.2 信息匹配與檢索

確定了目標網站的URL變化模式,下一步分析我們需要爬取內容在網站中的位置。現在的目標信息為:書名,評分,評價人數,作者與出版社。需要用火狐瀏覽器打開豆瓣頁面,找到目標網站,按下F12,然后分析頁面的源代碼,找到目標信息的CSS代碼。本次假設查找的目標為關于南京的圖書,根據火狐瀏覽器所提供的信息,圖書信息對應的CSS關鍵代碼如圖6所示。

根據頁面的源代碼得知:書單的所有信息都寫在了class為mod book-list的div中。其中每個dl標簽都是一本關于主題書的信息。需要的信息除了評價人數以外,其他都寫在dd標簽中。評價人數的信息在另外的頁面,也就是書名所在標簽的超鏈接。按照同樣的方法進行代碼的定位。

2.3 狀態碼的檢測

由于在測試爬蟲時需要不斷的構造URL來進行請求,所以需要對每次請求后的狀態碼進行一個監測[8]。當進行爬取時有時候會遇到被該網站封IP的情況,此時返回的reponse的狀態碼為403,但是Scrapy框架會將該情況忽視掉,因為Scrapy庫默認是對狀態碼處于200-300之間的請求處理。因此,我們需要手動添加代碼:handle_httpstatus_list=[403],這樣就能通過判斷response.status==403來拋出CloseSpider異常,最后結束抓取。

2.4 錄入與展示

本次數據庫選用的是Mysql數據庫,需要PyMySQL驅動連接操作數據庫。讀取展示模塊就是將數據庫中存儲的信息值展示在自己的頁面上。本文選擇用Java中的Spring,SpringMvc,MyBatis三大框架搭建查詢頁面。查詢效果圖如圖7所示。

3 編寫爬蟲時遇到的問題

3.1 爬蟲被封禁

在第一次運行爬蟲爬取了幾百條數據后,開始大量的出現不正常的狀態碼,如404。再當人為打開豆瓣時,發現網站已經發現了我們的異常行為,并強制要求登錄,登錄以后才顯示正常的頁面[9]。這種情況說明所爬取的目標網站已經檢測到了我們的爬蟲,也就是我們的瀏覽特性與正常用戶不一樣,導致服務器將我們當前的IP進行封禁。

對此的解決方案就是采用User Agent偽裝對目標網站進行爬取,并加入隨機延時來更好的模擬訪問瀏覽器行為。

3.2 多主題爬取

由于此次爬取只選擇了一個主題的書進行存儲,所以單表設計沒有問題。當對多個主題的書進行爬取時,單表不利于爬取信息的瀏覽。所以在對多個主題的書進行爬取時,可以將其存放至Excel表格中,每個單元格對應的是一跳爬取數據。每個sheet頁則存放對應主題爬取到的書的信息。

根據評分從高到低依次排序展示,使得我們能更有效的瀏覽所需信息。對應的展示效果圖如圖8所示。

3.3 加密的傳參

本次選擇爬取的頁面是豆瓣網。豆瓣網內大多數頁面都是靜態的,相對來說比較容易爬取。有時需要的信息必須通過請求獲取,比如使用Ajax傳值或者使用JavaScript生成。所以我們需要使用火狐自帶的開發者工具,查看請求中的參數,然后使用程序進行模擬。當然,有些網站的傳參是加密過的,無法模擬構造需要的參數請求。遇到這樣的網站,需要改變技術,采用selenium+phantomJS框架,使用phantomJS來執行js模擬人為的操作,觸發頁面的JavaScript腳本。從填寫表單數據到表單數據提交,再到回滾頁面,這些都可以模擬出來。利用這套框架,就可以解決大多數的反爬蟲策略[7]。

4 結束語

本文研究的是Python框架下基于主題的數據爬取技術研究與實現,通過爬蟲程序的實現,對目標網站目標數據進行爬取,深入了解了Python開發的一系列步驟。從編寫完程序爬取數據時IP被網站封禁,到一步步優化程序成功爬取信息保存到本地,實現了本次論文的研究目標。

雖然本次爬蟲程序的開發工作結束,但還有很多地方需要改進。比如,當數據量過大,爬蟲爬取耗費的時間會比較耗時,可以嘗試改進成分布式的爬蟲,這樣可以提升工作效率。

參考文獻(References):

[1] 管華.對當今Python快速發展的研究與展望[J].信息系統工程,2015.12.

[2] 姜杉彪,黃凱林,盧昱江,張俊杰,曾志高,劉強.基于Python的專業網絡爬蟲的設計與實現[J].企業科技與發展,2016.8.

[3] 孫立偉,何國輝,吳禮發.網絡爬蟲技術的研究[J].電腦知識與技術,2010.15.

[4] 成功,李小正,趙全軍.一種網絡爬蟲系統中URL去重方法的研究[J].中國新技術新產品,2014.12.

[5] 牛率仁.簡析主題網絡爬蟲搜索策略[J].電腦迷,2016.10.

[6] 陳琳,任芳.基于Python的新浪微博數據爬蟲程序設計[J].計算機技術與展,2007.3.

[7] 劉艷平,俞海英,戎沁.Python模擬登錄網站并抓取網頁的方法[J].微型電腦應用,2015.2.

主站蜘蛛池模板: 99久久性生片| 国产成人精品无码一区二| 国产午夜精品鲁丝片| 午夜不卡福利| 久久一级电影| 欧美国产三级| 国产一级二级在线观看| 国产一区二区三区免费| 免费全部高H视频无码无遮掩| 红杏AV在线无码| 精品视频免费在线| 91久久国产成人免费观看| 99视频全部免费| V一区无码内射国产| 97国产在线播放| 国产丝袜丝视频在线观看| 国产欧美日韩一区二区视频在线| 亚洲大学生视频在线播放 | 伊人久久大香线蕉影院| 麻豆精品在线视频| 国产成人免费高清AⅤ| 亚洲人成网站在线观看播放不卡| 精品伊人久久久香线蕉| 国产二级毛片| 亚洲午夜福利在线| 免费人成视网站在线不卡| 国产本道久久一区二区三区| 日韩 欧美 小说 综合网 另类 | 香蕉网久久| 国产精品一老牛影视频| 综合天天色| 国产人成网线在线播放va| 亚洲大尺度在线| 99精品视频播放| 综合五月天网| 久久这里只有精品免费| 2022国产91精品久久久久久| 91丨九色丨首页在线播放| 乱人伦视频中文字幕在线| 男女性午夜福利网站| 日韩av手机在线| 91丨九色丨首页在线播放| 97视频精品全国免费观看| 最新国语自产精品视频在| 欧美亚洲一二三区| 女同久久精品国产99国| 欧美日韩一区二区在线播放| 亚洲综合精品香蕉久久网| 免费高清a毛片| 久久免费看片| 天天色综合4| 免费人成网站在线观看欧美| 亚洲午夜久久久精品电影院| 日韩专区第一页| 国产网站黄| 最新国产精品鲁鲁免费视频| 免费播放毛片| 色婷婷视频在线| 日韩午夜片| 岛国精品一区免费视频在线观看| 亚洲精品麻豆| 国产精品区网红主播在线观看| 午夜性刺激在线观看免费| 91精品久久久无码中文字幕vr| 精品无码视频在线观看| 精品国产自在在线在线观看| 国产欧美日韩在线一区| 精品视频一区在线观看| 成人无码一区二区三区视频在线观看| 日本欧美成人免费| 亚洲视频在线观看免费视频| 97超爽成人免费视频在线播放| 国产99在线| 欧美 亚洲 日韩 国产| 亚洲精品国产首次亮相| 成人在线亚洲| 欧美精品啪啪| h视频在线播放| 91无码网站| 91精品国产综合久久不国产大片| 国产真实乱子伦精品视手机观看| 亚洲第一精品福利|