林汨圣 王揚(yáng)
摘? 要:在工作和研究中持續(xù)更新大量的資料和數(shù)據(jù)是建筑師的職業(yè)基礎(chǔ)。傳統(tǒng)人工搜索互聯(lián)網(wǎng)的方式工作量大且挖掘率低,對(duì)網(wǎng)站數(shù)據(jù)源的利用往往不夠充分。國(guó)內(nèi)大部分建筑類(lèi)網(wǎng)站采用HTML文本標(biāo)記數(shù)據(jù),對(duì)HTML采用網(wǎng)絡(luò)聚焦爬蟲(chóng)有助于建筑師高效定位并規(guī)范化儲(chǔ)存專(zhuān)業(yè)數(shù)據(jù)。通過(guò)對(duì)建筑類(lèi)主流網(wǎng)站結(jié)構(gòu)特征進(jìn)行分析,總結(jié)建筑學(xué)3種專(zhuān)業(yè)爬蟲(chóng)需求?;赑ython的語(yǔ)言特征,提出公開(kāi)數(shù)據(jù)類(lèi)和建筑檔案類(lèi)2種爬蟲(chóng)策略。實(shí)測(cè)結(jié)果表明爬蟲(chóng)策略具有數(shù)據(jù)采集實(shí)時(shí)性好、易管理維護(hù)的優(yōu)點(diǎn),同時(shí)均運(yùn)行高效且穩(wěn)定,可為建筑專(zhuān)業(yè)大數(shù)據(jù)分析提供更多高質(zhì)量的數(shù)據(jù)源。
關(guān)鍵詞:聚焦爬蟲(chóng);網(wǎng)絡(luò)爬蟲(chóng);HTML;Python;建筑學(xué)
中圖分類(lèi)號(hào):TU17? ? ? ? ?文獻(xiàn)標(biāo)志碼:A? ? ? ? ?文章編號(hào):2095-2945(2020)33-0001-06
Abstract: It is a professional basis for architects to keep updating a large number of data and statistics in work and research. Due to the heavy workload and low work rate of the traditional artificial Internet search mode, the utilization of website resource is often insufficient. Most of Chinese architectural websites use Hyper Text Markup Language. Through focus crawler of HTML, it is efficient for architects to locate and store data in a standard way. Based on the analysis of common websites of architecture, three kinds of professional crawler requirements of architects are summarized. Based on the features of Python, two crawler strategies, namely numeral data strategy and building archives strategy, are proposed. Results show that these strategies are highly effective, stable, and have advantages of good real-time data collection, easy management and maintenance, which can provide more high-quality data sources for architectural big data analysis.
Keywords: focused crawler; web crawler; HTML; Python; architecture
建筑師是與時(shí)俱進(jìn)的職業(yè),保持對(duì)專(zhuān)業(yè)資訊的敏感度是一種基礎(chǔ)素養(yǎng)。隨著互聯(lián)網(wǎng)的普及,世界各地的建筑資料均可在互聯(lián)網(wǎng)自由共享。對(duì)大部分建筑師而言,面臨的不再是缺乏資料的問(wèn)題,而是高效地從海量資料中篩選信息的問(wèn)題。隨著編程技術(shù)的普及,基于Python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)可為建筑師訂制建筑相關(guān)數(shù)據(jù)的專(zhuān)用搜索引擎。本文根據(jù)網(wǎng)絡(luò)爬蟲(chóng)的運(yùn)行原理,在分析建筑學(xué)主流網(wǎng)站的特征后提出面對(duì)建筑專(zhuān)業(yè)需求的爬蟲(chóng)策略,為建筑專(zhuān)業(yè)數(shù)據(jù)挖掘和大數(shù)據(jù)分析提供可靠的研究基礎(chǔ)。
1 建筑專(zhuān)業(yè)爬蟲(chóng)需求與實(shí)現(xiàn)技術(shù)
1.1 建筑學(xué)網(wǎng)絡(luò)需求
建筑學(xué)專(zhuān)業(yè)常規(guī)采集數(shù)據(jù)的方法有3種:查閱書(shū)刊、實(shí)測(cè)與問(wèn)卷、搜索互聯(lián)網(wǎng)。其中多數(shù)建筑人員搜索互聯(lián)網(wǎng)的方式是通過(guò)瀏覽器手動(dòng)搜索并下載數(shù)據(jù)。這種手動(dòng)操作方式是一種傳統(tǒng)的網(wǎng)絡(luò)數(shù)據(jù)挖掘方式。如今互聯(lián)網(wǎng)普及的時(shí)代,建筑專(zhuān)業(yè)對(duì)高效獲取網(wǎng)絡(luò)信息的需求日益增加。研究項(xiàng)目時(shí)需要基礎(chǔ)資料、設(shè)計(jì)構(gòu)思時(shí)需要參考案例、會(huì)議總結(jié)時(shí)需要規(guī)范模板,等等。然而,海量數(shù)據(jù)的篩選也占用了工作的大量時(shí)間和精力。特別是國(guó)內(nèi)大部分建筑相關(guān)網(wǎng)站都是免費(fèi)提供資源,網(wǎng)站內(nèi)不可避免地安插廣告、驗(yàn)證碼、個(gè)性推薦等干擾信息。因此,準(zhǔn)確、直接且高效地定位所需網(wǎng)絡(luò)數(shù)據(jù),按照用戶(hù)意愿規(guī)范化存儲(chǔ)到本地是建筑相關(guān)從業(yè)人員和研究人員的切實(shí)需求。
目前與建筑相關(guān)的爬蟲(chóng)研究并不多。比如,房產(chǎn)信息研究者關(guān)注通過(guò)爬蟲(chóng)獲取某地區(qū)房?jī)r(jià)及相關(guān)數(shù)據(jù),借此分析房?jī)r(jià)趨勢(shì)[1]。地理研究者借助爬蟲(chóng)提高獲取地理國(guó)情房屋建筑專(zhuān)題數(shù)據(jù)的精度和效率[2]。規(guī)劃研究者爬取多源數(shù)據(jù)并融合應(yīng)用于城市規(guī)劃研究[3]。大部分研究都是從數(shù)據(jù)研究員的視角出發(fā),但從建筑學(xué)的專(zhuān)業(yè)需求出發(fā)解決網(wǎng)絡(luò)爬蟲(chóng)問(wèn)題的專(zhuān)項(xiàng)研究較少。參考有關(guān)建筑類(lèi)網(wǎng)站建設(shè)的有關(guān)研究[4,5],總結(jié)建筑學(xué)常用網(wǎng)絡(luò)資源如表1所示。建筑類(lèi)網(wǎng)站分為3類(lèi):建筑檔案類(lèi)、公開(kāi)數(shù)據(jù)類(lèi)、素材收集類(lèi)。也有整合資源的大型綜合網(wǎng)站涵蓋了上述3類(lèi),比如,筑龍學(xué)社(www.zhulong.com/)、建筑學(xué)院(www.archcollege.com/)和土木工程網(wǎng)(www.civilcn.com/)等。查看網(wǎng)站主頁(yè)源代碼可知,國(guó)內(nèi)建筑學(xué)常用網(wǎng)站大多仍采用傳統(tǒng)的HTML文檔(Hyper Text Markup Language,超文本標(biāo)記語(yǔ)言)編寫(xiě)。HTML指帶有CSS(Cascading Style Sheets,層疊樣式表)屬性的文本,是專(zhuān)門(mén)用于描述網(wǎng)頁(yè)的一種標(biāo)記語(yǔ)言。HTML層級(jí)結(jié)構(gòu)分明,所需下載的數(shù)據(jù)按上下級(jí)目錄有序存儲(chǔ)在網(wǎng)頁(yè)源代碼中。通過(guò)定位HTML文檔的標(biāo)記(Tag)或?qū)傩裕╟lass)可實(shí)現(xiàn)聚焦爬蟲(chóng)獲取數(shù)據(jù)。
1.2 基于Python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)
網(wǎng)絡(luò)爬蟲(chóng)(Web Crawler)也叫網(wǎng)絡(luò)蜘蛛(Spider)、網(wǎng)絡(luò)機(jī)器人(Robot)等,指自動(dòng)依照用戶(hù)定制的規(guī)則搜索并獲取網(wǎng)絡(luò)數(shù)據(jù)的機(jī)械程序。爬蟲(chóng)可代替用戶(hù)通過(guò)網(wǎng)站的URL(Uniform Resource Locator,統(tǒng)一資源定位符)向服務(wù)器請(qǐng)求數(shù)據(jù)。服務(wù)器響應(yīng)后,爬蟲(chóng)可以代替瀏覽器解析網(wǎng)站源代碼,然后根據(jù)設(shè)定的規(guī)則批量提取數(shù)據(jù)。最后,爬蟲(chóng)可按要求規(guī)范地把數(shù)據(jù)存儲(chǔ)到本地,便于日后處理。本質(zhì)上爬蟲(chóng)就是程序超高速模仿人工上網(wǎng),讓非網(wǎng)站管理員的用戶(hù)從網(wǎng)站獲取批量數(shù)據(jù)。一個(gè)考慮周到的爬蟲(chóng)程序可以與服務(wù)器形成良性互動(dòng),很大程度輔助建筑專(zhuān)業(yè)解決網(wǎng)絡(luò)資源的采集需求,讓建筑學(xué)數(shù)據(jù)庫(kù)容量更貼近大數(shù)據(jù)要求[6]。Python語(yǔ)言可在大多數(shù)情況下高效地實(shí)現(xiàn)建筑專(zhuān)業(yè)爬蟲(chóng)需求。
Python是一門(mén)面向?qū)ο缶幊蹋∣bject Oriented Programming)的語(yǔ)言,其具象和簡(jiǎn)潔的特性更適合跨專(zhuān)業(yè)編程人員閱讀使用。Python跨平臺(tái)廣、開(kāi)源代碼庫(kù)量大,從爬蟲(chóng)、數(shù)據(jù)分析到機(jī)器學(xué)習(xí)、圖像識(shí)別等,可以輔助建筑專(zhuān)業(yè)完成機(jī)械性的重復(fù)工作[7-8]。通常在建筑類(lèi)數(shù)據(jù)的爬蟲(chóng)中,搜索對(duì)象都是具象且明確的,操作思路是清晰明確的。使用Python爬蟲(chóng)可以盡可能接近建筑師思維完成工作。Python不一定最適應(yīng)爬蟲(chóng),但很大程度是最適合建筑師使用的編程語(yǔ)言?;赑ython編寫(xiě)的爬蟲(chóng)程序不僅是獲取專(zhuān)業(yè)數(shù)據(jù)的良好基礎(chǔ),也是大數(shù)據(jù)分析的科學(xué)基礎(chǔ)。本文借助Python3語(yǔ)言引用requests、BeautifulSoup、openpyxl、os等代碼庫(kù)編寫(xiě)爬蟲(chóng)代碼。其中requests用于請(qǐng)求URL數(shù)據(jù),BeautifulSoup用于解析HTML文檔,其他代碼庫(kù)聯(lián)動(dòng)用于獲取并規(guī)范化儲(chǔ)存數(shù)據(jù)。
1.3 適應(yīng)建筑專(zhuān)業(yè)需求的爬蟲(chóng)策略
網(wǎng)絡(luò)爬蟲(chóng)按照實(shí)現(xiàn)的技術(shù)和結(jié)構(gòu)分為通用爬蟲(chóng)、聚焦爬蟲(chóng)、增量式爬蟲(chóng)和深度爬蟲(chóng)等。由于建筑網(wǎng)站具有較高專(zhuān)業(yè)性,網(wǎng)站彼此較為獨(dú)立,很難只用通用爬蟲(chóng)技術(shù)實(shí)現(xiàn)全網(wǎng)數(shù)據(jù)爬蟲(chóng)。使用聚焦爬蟲(chóng)和深度爬蟲(chóng)能更有針對(duì)性地實(shí)現(xiàn)專(zhuān)業(yè)數(shù)據(jù)爬蟲(chóng)。聚焦爬蟲(chóng)(Focused Crawler)指按照預(yù)先定義好的主題有選擇地進(jìn)行網(wǎng)頁(yè)爬取。聚焦爬蟲(chóng)可把目標(biāo)定位在與建筑主題相關(guān)的網(wǎng)頁(yè)中爬取指定數(shù)據(jù),從而節(jié)省大量的服務(wù)器資源和帶寬資源,對(duì)特定專(zhuān)業(yè)內(nèi)容的爬取具有很強(qiáng)的實(shí)用性。深度爬蟲(chóng)(Deep Crawler)是以網(wǎng)頁(yè)深度優(yōu)先,把所需信息逐層打開(kāi),記錄所需信息的頁(yè)面列表,直到爬取滿(mǎn)足深度要求再結(jié)束。建筑類(lèi)網(wǎng)絡(luò)爬蟲(chóng)主要是這幾類(lèi)爬蟲(chóng)技術(shù)的組合體。
如表1所述,建筑類(lèi)網(wǎng)絡(luò)資源豐富且專(zhuān)業(yè)性較強(qiáng)。對(duì)應(yīng)的建筑學(xué)網(wǎng)絡(luò)爬蟲(chóng)需求主要有3種:圖文檔案資料,數(shù)值型數(shù)據(jù),批量同類(lèi)型素材。通過(guò)數(shù)據(jù)類(lèi)爬蟲(chóng)策略和檔案類(lèi)爬蟲(chóng)策略可基本解決上述需求。其中數(shù)據(jù)類(lèi)爬蟲(chóng)以聚焦優(yōu)先,檔案類(lèi)爬蟲(chóng)以深度優(yōu)先。通過(guò)調(diào)研發(fā)現(xiàn),我國(guó)政府門(mén)戶(hù)類(lèi)網(wǎng)站(*.gov.cn)內(nèi)大部分的公開(kāi)數(shù)據(jù)信息已經(jīng)過(guò)整理。用戶(hù)通過(guò)公民信息注冊(cè)登錄即可獲取信息。目前爬蟲(chóng)對(duì)這類(lèi)網(wǎng)站針對(duì)性不強(qiáng),同時(shí)也不提倡對(duì)這類(lèi)網(wǎng)站進(jìn)行爬蟲(chóng)。本文通過(guò)兩個(gè)實(shí)例分別實(shí)現(xiàn)數(shù)據(jù)類(lèi)爬蟲(chóng)和檔案類(lèi)爬蟲(chóng)策略。
2 公開(kāi)數(shù)據(jù)爬蟲(chóng)策略
2.1 數(shù)據(jù)請(qǐng)求與解析
數(shù)據(jù)類(lèi)爬蟲(chóng)指與連續(xù)數(shù)值關(guān)聯(lián)度較高的信息。比如:高度、面積和時(shí)間等。數(shù)據(jù)的影響因子涉及越全面,數(shù)據(jù)變動(dòng)規(guī)律的預(yù)測(cè)越準(zhǔn)確[9]。因此數(shù)據(jù)類(lèi)爬蟲(chóng)策略往往優(yōu)先限定提供數(shù)據(jù)樣本的網(wǎng)頁(yè)目錄。如非必要不深入網(wǎng)頁(yè)內(nèi)頁(yè),避免數(shù)據(jù)報(bào)錯(cuò)。本文以anjuke.com為例,搜索2020年3月廣州市越秀區(qū)二手房的房源信息。房?jī)r(jià)及其相關(guān)信息是時(shí)刻隨著市場(chǎng)交易變動(dòng)的。通過(guò)爬蟲(chóng)保持量大且長(zhǎng)期的數(shù)據(jù)庫(kù)才能基本滿(mǎn)足大數(shù)據(jù)的研究基礎(chǔ)。該網(wǎng)站網(wǎng)絡(luò)結(jié)構(gòu)層次清晰,數(shù)據(jù)量大且實(shí)時(shí)更新速度較快,能保證爬蟲(chóng)的長(zhǎng)期穩(wěn)定運(yùn)作。
尊重robots協(xié)議的科學(xué)爬蟲(chóng)是實(shí)現(xiàn)用戶(hù)與服務(wù)器間良性互動(dòng)的基礎(chǔ)。robots協(xié)議(robots exclusion protocol,網(wǎng)絡(luò)爬蟲(chóng)排除標(biāo)準(zhǔn))是互聯(lián)網(wǎng)爬蟲(chóng)的一項(xiàng)公認(rèn)的道德規(guī)范,用于公示允許爬蟲(chóng)的內(nèi)容。如圖1所示anjuke.com的部分robots協(xié)議內(nèi)容,禁止了具體目錄下的爬蟲(chóng)。本文對(duì)建筑類(lèi)網(wǎng)站爬蟲(chóng)均遵循網(wǎng)絡(luò)協(xié)議,研究重點(diǎn)在于準(zhǔn)確、便捷、穩(wěn)定地提取所需的有效信息,而不刻意強(qiáng)調(diào)爬蟲(chóng)速度。程序內(nèi)合理設(shè)置限速(Crawl-delay),避免對(duì)網(wǎng)站服務(wù)器造成負(fù)擔(dān)。盡管合理設(shè)置了限速,爬蟲(chóng)策略依然比人工搜索高效。
該網(wǎng)站主要的源數(shù)據(jù)基本記錄在HTML文檔中。因此,對(duì)HTML數(shù)據(jù)的爬蟲(chóng)策略主要分為四步:發(fā)出請(qǐng)求、解析文檔、定位數(shù)據(jù)、規(guī)范存儲(chǔ)。首先,通過(guò)網(wǎng)站的URL向網(wǎng)站服務(wù)器發(fā)出請(qǐng)求,征求服務(wù)器響應(yīng)。如圖2、3所示,當(dāng)Request Method顯示為“GET”時(shí),即為可請(qǐng)求的HTML文檔。Status_Code顯示為“2XX”時(shí)代表服務(wù)器成功響應(yīng)了請(qǐng)求。當(dāng)響應(yīng)成功后,服務(wù)器返回的是一個(gè)二進(jìn)制數(shù)據(jù)包,根據(jù)編碼方式進(jìn)行解碼即可獲取HTML文檔數(shù)據(jù)。
解碼所得HTML文檔數(shù)據(jù)可用第三方的bs庫(kù)解析為bs4.BeautifulSoup類(lèi),即一種容錯(cuò)能力較強(qiáng)的數(shù)據(jù)。解析后的網(wǎng)頁(yè)數(shù)據(jù)仍量大且雜亂,在獲取數(shù)據(jù)時(shí)需鎖定所需數(shù)據(jù)。通常先找尋數(shù)據(jù)的上級(jí)標(biāo)記(tag),再往下級(jí)縮小范圍定位每個(gè)數(shù)據(jù),從而避免數(shù)據(jù)干擾。有組織的數(shù)據(jù)定位可保證數(shù)據(jù)儲(chǔ)存的規(guī)范化。通常使用表格對(duì)這類(lèi)型數(shù)據(jù)進(jìn)行儲(chǔ)存,既便于Python直接分析,也便于第三方軟件讀取分析。
2.2 數(shù)據(jù)爬蟲(chóng)實(shí)現(xiàn)
如圖4展示了數(shù)據(jù)爬蟲(chóng)策略的程序核心代碼和執(zhí)行結(jié)果。本次爬蟲(chóng)設(shè)置結(jié)束條件為定數(shù)循環(huán)搜索同一詞條前50頁(yè)信息。網(wǎng)頁(yè)URL特征中‘guangzhou代表廣州市,‘yuexiu代表越秀區(qū),‘x代表頁(yè)碼。日后維護(hù)只需要修改上述關(guān)鍵參數(shù)即可搜索其他地區(qū)房源信息。通過(guò)requests.get()向該網(wǎng)站提出請(qǐng)求并自動(dòng)解碼返回的二進(jìn)制數(shù)據(jù)。通過(guò)res.content確認(rèn)該網(wǎng)為utf-8編碼,與Python3內(nèi)置編碼一致。因此確認(rèn)網(wǎng)站響應(yīng)成功后可直接用BeautifulSoup解析返回所得的HTML文檔。鎖定數(shù)據(jù)時(shí)用find()定位房源信息的總標(biāo)記(
如圖5展示了爬蟲(chóng)獲取的信息部分統(tǒng)計(jì)結(jié)果,最終結(jié)果顯示本次爬蟲(chóng)了3030條廣州市越秀區(qū)二手房房源信息。結(jié)果顯示2020年3月越秀區(qū)二手房均價(jià)52076.9元/m2。數(shù)據(jù)經(jīng)過(guò)清理、量化后可進(jìn)行簡(jiǎn)易統(tǒng)計(jì)。如建筑面積60m2以下的單位均價(jià)41001.5元/m2,60~100m2的均價(jià)51997.5元/m2,100m2以上的均價(jià)64429.8元/m2。將數(shù)值型數(shù)據(jù)輸入模型回歸模擬,回歸方程能解釋89.18%的房?jī)r(jià)變動(dòng),數(shù)據(jù)樣本趨勢(shì)符合預(yù)期,可供后續(xù)分析。本例爬蟲(chóng)總耗時(shí)442秒,可高效地輔助建筑師完成數(shù)據(jù)收集工作。同時(shí),程序編寫(xiě)后只需少量維護(hù)即可長(zhǎng)期多次重復(fù)運(yùn)行。
當(dāng)程序穩(wěn)定適應(yīng)平臺(tái)的大部分?jǐn)?shù)據(jù)后,該策略通過(guò)廣度爬蟲(chóng)可拓寬數(shù)據(jù)的豐富性和時(shí)效性。比如,依然以該網(wǎng)站為例,橫向獲取2019年4月至2020年3月廣州全市與廣州越秀區(qū)每月的新房和二手房均價(jià),綜合計(jì)算后生成折線圖對(duì)比一年內(nèi)房?jī)r(jià)變化趨勢(shì)。如圖6所示,結(jié)果顯示當(dāng)年廣州市新房與二手房房?jī)r(jià)變化差距較小,總體持平,略微偏升。越秀區(qū)新房均價(jià)同比上漲16.8%,環(huán)比持平微升,比全市均價(jià)高出約159.4%。越秀區(qū)二手房均價(jià)同比上漲7.3%,環(huán)比持平微跌,高出全市約66.7%,樣本趨勢(shì)符合預(yù)期。
3 建筑檔案爬蟲(chóng)策略
3.1 需求分析與策略解析
檔案類(lèi)爬蟲(chóng)指與離散數(shù)值相關(guān)的信息。比如:符號(hào)、文字和圖像等。建筑師在日常學(xué)習(xí)、方案構(gòu)思和項(xiàng)目研究時(shí)都會(huì)參考大量的建筑案例。在搜尋案例時(shí)不僅要獲取文字描述,也要案例圖片、視頻等多媒體數(shù)據(jù)。也有建筑學(xué)者需要下載電子書(shū)、期刊、論文等大篇幅字符類(lèi)數(shù)據(jù)。當(dāng)檔案型數(shù)據(jù)收集滿(mǎn)足一定數(shù)量和質(zhì)量,通過(guò)人工分析或機(jī)械學(xué)習(xí)輔助解析,可以在一定程度分析出科學(xué)規(guī)律。數(shù)據(jù)表現(xiàn)的共性越多,數(shù)據(jù)內(nèi)在聯(lián)系的越緊密。
檔案爬蟲(chóng)策略請(qǐng)求服務(wù)器與解析HTML的方式與數(shù)據(jù)類(lèi)策略相近。在此基礎(chǔ)上,增加網(wǎng)頁(yè)列表的篩選和圖文資料的分渠處理兩步。這些內(nèi)容重復(fù)判斷較多,寫(xiě)成一條主程序既不簡(jiǎn)潔也不便維護(hù)。因此在建立主程序前需要先封裝成幾個(gè)小程序。本文以zhulong.com為例,爬取展覽建筑案例,包括文字描述、圖片和鏈接,并按相同格式存儲(chǔ)同一檔案中。由于zhulong.com屬于大型綜合網(wǎng)站,架構(gòu)復(fù)雜且信息繁多,需分層結(jié)構(gòu)特征,避免信息干擾或報(bào)錯(cuò)。該網(wǎng)站的內(nèi)置搜索引擎實(shí)為全站搜索引擎,即沒(méi)有專(zhuān)門(mén)案例信息的高級(jí)搜索。傳統(tǒng)人工搜集展覽建筑案例的用戶(hù)只能手動(dòng)翻頁(yè),逐頁(yè)找尋符合要求的案例資料。因此在網(wǎng)頁(yè)列表時(shí)優(yōu)先采用聚焦爬蟲(chóng),通過(guò)設(shè)置若干關(guān)鍵詞,讓計(jì)算機(jī)篩選出只符合要求的案例信息,提高搜索效率。過(guò)濾出網(wǎng)頁(yè)列表后再通過(guò)深度爬蟲(chóng)請(qǐng)求并解析每個(gè)案例網(wǎng)頁(yè)的內(nèi)部信息。分別定位文字和圖片數(shù)據(jù)后再按規(guī)定路徑儲(chǔ)存。
3.2 檔案爬蟲(chóng)實(shí)現(xiàn)
如圖7所示,為案例檔案爬蟲(chóng)程序核心代碼。首先分別封裝3條小程序:mkdir()通過(guò)傳入路徑參數(shù)新建檔案名為案例名的文件夾;getphoto()通過(guò)傳入單張圖片URL下載圖片并單獨(dú)存放;getpageinfo()通過(guò)傳入網(wǎng)頁(yè)列表下載案例圖文信息并自動(dòng)排版到文檔中。主程序要求簡(jiǎn)潔、穩(wěn)定,因此核心代碼只負(fù)責(zé)獲取參數(shù)和傳入?yún)?shù)。通過(guò)分析網(wǎng)站特征聚焦至建筑案例統(tǒng)計(jì)頁(yè)(bbs.zhulong.com),并把分類(lèi)限制在文化建筑案例(101010_group_201808/simple)。定位案例的題目(('a')['title'])和案例URL(('a')['href'])。設(shè)置關(guān)鍵詞“展覽”,令符合篩選規(guī)則的案例URL傳入網(wǎng)頁(yè)列表。網(wǎng)頁(yè)列表完成后傳入getpageinfo(),逐一提取列表中的每個(gè)案例進(jìn)行深度爬蟲(chóng)。進(jìn)一步分析源代碼發(fā)現(xiàn)該網(wǎng)內(nèi)部格式分歧較多,初步推測(cè)網(wǎng)站主站和內(nèi)頁(yè)可能分包給不同的工程師構(gòu)建。因此編程時(shí)要多次測(cè)試,把所有情況都考慮周全。先檢測(cè)案例內(nèi)頁(yè)是否響應(yīng),如響應(yīng)成功,啟用mkdir()建立檔案,否則返回錯(cuò)誤代碼和案例URL。通過(guò)上級(jí)標(biāo)記(
標(biāo)記定位文章文字內(nèi)容,然后再通過(guò)標(biāo)記()定位圖片。程序試運(yùn)行發(fā)現(xiàn)所有圖片數(shù)據(jù)都會(huì)輸出兩遍,但沒(méi)有報(bào)錯(cuò)。分析發(fā)現(xiàn)圖片的標(biāo)記和夾頁(yè)(
結(jié)果顯示截止2020年3月bbs.zhulong.com有274頁(yè)合共5462條關(guān)于文化類(lèi)建筑的案例信息。本例爬蟲(chóng)總耗時(shí)4118秒,共爬取有關(guān)展覽建筑案例83例。爬蟲(chóng)程序自動(dòng)完成從資料搜索、文檔建立到圖文儲(chǔ)存。資料數(shù)據(jù)完整度高,格式統(tǒng)一,具有較高的研究和再利用價(jià)值。
4 結(jié)束語(yǔ)
本文分析了建筑專(zhuān)業(yè)的常用網(wǎng)絡(luò)需求,總結(jié)了3類(lèi)建筑類(lèi)網(wǎng)站。在分析Python語(yǔ)言?xún)?yōu)勢(shì)和網(wǎng)絡(luò)聚焦爬蟲(chóng)特征后,提出2種適用于建筑類(lèi)網(wǎng)站的爬蟲(chóng)策略。通過(guò)實(shí)例展示了爬蟲(chóng)策略的深度和廣度。其中數(shù)據(jù)類(lèi)爬蟲(chóng)策略可快速定位數(shù)值型數(shù)據(jù)并規(guī)范整理到表格中,便于讀取和分析。檔案類(lèi)爬蟲(chóng)策略對(duì)多媒體文件有高效的處理能力,有利于建筑師查閱和深入研究。對(duì)大數(shù)據(jù)長(zhǎng)期的觀測(cè)有助建筑從業(yè)人員更好地把握行業(yè)動(dòng)態(tài),調(diào)整自身,是實(shí)施決策前的重要基礎(chǔ)。
參考文獻(xiàn):
[1]姜東民,張永正,陳雅靜.基于網(wǎng)絡(luò)爬蟲(chóng)的房產(chǎn)價(jià)格信息獲取及分析——以青島地區(qū)為例[J].信息技術(shù)與信息化,2018(08):108-111+114.
[2]秦思嫻,傅曉俊,余詠勝,等.基于Python實(shí)現(xiàn)地理國(guó)情房屋建筑專(zhuān)題信息提取[J].測(cè)繪與空間地理信息,2015,38(08):1-3+6.
[3]裴蓮蓮,唐建智,畢小碩.多源空間大數(shù)據(jù)的獲取及在城市規(guī)劃中的應(yīng)用[J].地理信息世界,2019,26(01):13-17.
[4]張良,吳農(nóng).我國(guó)綠色建筑類(lèi)網(wǎng)站的發(fā)展與現(xiàn)狀分析[J].河北工程大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,29(01):37-40.
[5]王琳琳,方立新,顧建新.建筑師網(wǎng)站的信息構(gòu)建研究[J].情報(bào)探索,2008(04):60-62.
[6]何愉舟,韓傳峰.基于物聯(lián)網(wǎng)和大數(shù)據(jù)的智能建筑健康信息服務(wù)管理系統(tǒng)構(gòu)建[J].建筑經(jīng)濟(jì),2015,36(05):101-106.
[7]葛金剛,劉晗晗.基于PYTHON的多軟件模型轉(zhuǎn)換程序的開(kāi)發(fā)[J].工業(yè)建筑,2014,44(S1):324-326.
[8]孫一鳧,呂浩宇,陳毅興,等.基于EnergyPlus-Python聯(lián)合模擬和強(qiáng)化學(xué)習(xí)算法的室內(nèi)環(huán)境控制優(yōu)化[J].建設(shè)科技,2019(24):52-58.
[9]汪亮.對(duì)利用大數(shù)據(jù)掌握房地產(chǎn)市場(chǎng)價(jià)格的思考[J].中國(guó)房地產(chǎn),2017(31):50-52.