孫建言 馬雨欣 武文杰


摘要:通過(guò)Python和Scrapy框架的使用,實(shí)現(xiàn)了一個(gè)對(duì)電商商品和商品評(píng)價(jià)信息的爬取系統(tǒng),文中詳細(xì)地介紹了該系統(tǒng)的設(shè)計(jì)過(guò)程,能夠完成需求中的功能,并且對(duì)所有爬取下來(lái)的數(shù)據(jù)進(jìn)行了分析,對(duì)商品的不同品牌各類信息進(jìn)行比對(duì)。
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng);Python;數(shù)據(jù)分析
中圖分類號(hào):G434? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)26-0061-03
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
Abstract: Through the use of Python and Scrapy framework, a crawling system for commercial mobile phone products and commodity evaluation information is realized. The design process of the system is introduced in detail, which can complete the functions in demand. All the crawled data are analyzed and the information of different brands of products is compared.
Key words: network crawler; Python; data analysis
1 引言
近年來(lái),隨著電商行業(yè)的興起和物流產(chǎn)業(yè)的飛速發(fā)展,人們網(wǎng)上購(gòu)物日益普遍。電商平臺(tái)商品琳瑯滿目良莠不齊,加上商家往往夸大商品效果,甚至采用刷單手段增加商品人氣,往往造成消費(fèi)者不能理性選擇優(yōu)質(zhì)商品。
人們?cè)缫岩庾R(shí)到互聯(lián)網(wǎng)中的數(shù)據(jù)是有待開(kāi)采的巨大金礦,這些數(shù)據(jù)將會(huì)改善我們的生活,網(wǎng)絡(luò)爬蟲(chóng)的出現(xiàn)以及相應(yīng)人才的增多正是基于對(duì)數(shù)據(jù)價(jià)值的重視。目前已經(jīng)存在很多基于網(wǎng)絡(luò)爬蟲(chóng)的比貨網(wǎng)站,但大多數(shù)都只是爬取商品的參數(shù)的比較,難以站在消費(fèi)者的角度上去比較商品之間的優(yōu)劣。
本課題目的是通過(guò)爬蟲(chóng)技術(shù),使得在電商購(gòu)買商品時(shí)能從各參數(shù)和用戶體驗(yàn)方面給消費(fèi)者一個(gè)客觀、可靠、可信的購(gòu)機(jī)推薦。
2 關(guān)鍵性開(kāi)發(fā)技術(shù)
2.1 Python
Python是一種開(kāi)源的面向?qū)ο蟮哪_本語(yǔ)言。Python由于其易理解性、易讀性以及簡(jiǎn)潔性,以及對(duì)云計(jì)算、大數(shù)據(jù)與人工智能開(kāi)發(fā)有很好的支持,因此越來(lái)越受到大眾的喜歡。它的代碼重用性很高,Python的模塊庫(kù)龐大到恐怖,幾乎無(wú)所不包。因此,沒(méi)有特殊要求的網(wǎng)絡(luò)爬蟲(chóng),最好選擇使用Python。
2.2 Scrapy
Scrapy是一個(gè)使用Python語(yǔ)言編寫(xiě)的開(kāi)源網(wǎng)絡(luò)爬蟲(chóng)框架,目前由Scrapinghub Ltd維護(hù)。Scrapy具有簡(jiǎn)單易用、靈活易拓展、開(kāi)發(fā)社區(qū)活躍,并且是跨平臺(tái)的等優(yōu)點(diǎn)。在Linux、MaxOS以及Windows平臺(tái)都可以使用。Scrapy是Python語(yǔ)言下最流行的網(wǎng)絡(luò)爬蟲(chóng)框架,開(kāi)發(fā)者只需要對(duì)幾個(gè)特定的模塊進(jìn)行開(kāi)發(fā)就能寫(xiě)出一個(gè)穩(wěn)定高效的網(wǎng)絡(luò)爬蟲(chóng)。所以本爬蟲(chóng)程序選擇了這個(gè)框架。
2.3 Django
Django項(xiàng)目是Python語(yǔ)言的定制框架,它源自一個(gè)在線新聞Web站點(diǎn),于2005年以開(kāi)源的形式被釋放出來(lái)。Django框架的核心組件包括用于創(chuàng)建模型的對(duì)象關(guān)系映射、為最終用戶設(shè)計(jì)完美的管理界面、一流的URL設(shè)計(jì)、設(shè)計(jì)者友好的模板語(yǔ)言、緩存系統(tǒng)。Django鼓勵(lì)快速開(kāi)發(fā),并遵循MVC設(shè)計(jì)理念。它的主要目的是簡(jiǎn)便、快速地開(kāi)發(fā)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的網(wǎng)站。它強(qiáng)調(diào)代碼的復(fù)用,還有許多功能強(qiáng)大的第三方插件,甚至可以很方便地開(kāi)發(fā)出自己的工具包,這使Django具有很強(qiáng)的可拓展性。
2.4? Ajax
AJAX(Asynchronous JavaScript and XML,異步JavaScript和XML)是使用JavaScript向服務(wù)器發(fā)出請(qǐng)求,并獲取返回信息,但是AJAX技術(shù)與傳統(tǒng)方式不同的是,使用AJAX不會(huì)刷新整個(gè)頁(yè)面。這種技術(shù)拓展了Web應(yīng)用的功能,豐富了Web客戶端表現(xiàn)的能力,體現(xiàn)出了特別好的交互性。大型網(wǎng)站一般都會(huì)用這種技術(shù)。
3? 爬蟲(chóng)框架分析
在從網(wǎng)站中提取數(shù)據(jù)時(shí),沒(méi)有 "一刀切" 的方法。很多時(shí)候都會(huì)采取臨時(shí)方法,如果開(kāi)始為執(zhí)行的每個(gè)小任務(wù)編寫(xiě)代碼,那么使用Scrapy框架是最佳的選擇,因?yàn)槠涮峁┝艘幌盗蟹奖愕膽?yīng)用模板。
Scrapy 使用了Twisted異步網(wǎng)絡(luò)庫(kù)來(lái)處理網(wǎng)絡(luò)通訊,并從數(shù)據(jù)流的角度揭示了Scrapy工作原理,整體架構(gòu)大致如圖1所示。
其中,各個(gè)組件的介紹如下表所示。
4系統(tǒng)整體模塊設(shè)計(jì)
各個(gè)模塊功能簡(jiǎn)述如下:
爬蟲(chóng)模塊:主要是用來(lái)爬取數(shù)據(jù),爬取京東商城上的手機(jī)商品信息的數(shù)據(jù),包括手機(jī)的標(biāo)題、手機(jī)的品牌、手機(jī)的價(jià)格、手機(jī)的圖片鏈接、手機(jī)的參數(shù)。爬完這些信息后,接下來(lái)會(huì)對(duì)每個(gè)商品的評(píng)價(jià)的進(jìn)行爬取,這里需要說(shuō)明的是京東商品的評(píng)價(jià)只展示一百頁(yè),一百頁(yè)之后就無(wú)法獲取數(shù)據(jù)了。
數(shù)據(jù)分析模塊:主要是對(duì)爬取的評(píng)論進(jìn)行分析,采用了結(jié)巴中文分詞包,對(duì)評(píng)論進(jìn)行分詞,再通過(guò)構(gòu)造的stop字典、情感字典、程度詞字典等,對(duì)每條評(píng)論進(jìn)行情感極性判斷,最終計(jì)算出每個(gè)商品積極情感率。
數(shù)據(jù)展示模塊:主要是對(duì)爬取的商品信息以及數(shù)據(jù)分析的結(jié)果和pygal對(duì)獲取的數(shù)據(jù)進(jìn)行各種繪圖,最終通過(guò)ajax與django后端交互在網(wǎng)頁(yè)中顯示出來(lái)。
由于分析網(wǎng)頁(yè)評(píng)論加載方式,發(fā)現(xiàn)是和價(jià)格加載方式一樣,通過(guò)json接口,而各商品評(píng)論直接json接口的主要區(qū)別也在于商品的id,于是就設(shè)計(jì)了如下爬蟲(chóng)方案: