国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Python的網(wǎng)絡(luò)關(guān)鍵字熱度獲取工具的研究與實(shí)現(xiàn)

2018-02-26 12:23孟亞茹姚凱學(xué)安世博
電子技術(shù)與軟件工程 2018年17期
關(guān)鍵詞:指數(shù)爬蟲

孟亞茹 姚凱學(xué) 安世博

摘要

搜索指數(shù),是以各大搜索網(wǎng)站海量網(wǎng)民行為數(shù)據(jù)作為基礎(chǔ)的數(shù)據(jù)分析統(tǒng)計(jì)結(jié)果,是衡量詞條搜索熱度的重要指標(biāo),對(duì)數(shù)據(jù)分析具有重要的參考價(jià)值。本文詳細(xì)介紹了一個(gè)基于Python的網(wǎng)絡(luò)關(guān)鍵字熱度獲取工具的研究與實(shí)現(xiàn)過程,用以獲取現(xiàn)有指數(shù)平臺(tái)的指數(shù)數(shù)據(jù)。文中以搜狗指數(shù)、微信媒體指數(shù)為例,詳細(xì)敘述了如何尋找URL入口、獲取并解析數(shù)據(jù)、以及如何清洗數(shù)據(jù)的技術(shù)與方法。測(cè)試結(jié)果表明,該爬蟲工具可以準(zhǔn)確地獲取目標(biāo)關(guān)鍵字在自定義時(shí)間段內(nèi)的指數(shù)熱度情況,具有實(shí)用價(jià)值。

【關(guān)鍵詞】Python 爬蟲 指數(shù) 數(shù)據(jù)獲取

搜索指數(shù),是指以網(wǎng)民的搜索行為為基礎(chǔ),對(duì)其搜索內(nèi)容以及搜索次數(shù)進(jìn)行統(tǒng)計(jì)分析,得出的該目標(biāo)關(guān)鍵字被搜索的頻次。搜索指數(shù)不僅可以反映出某關(guān)鍵字在特定網(wǎng)站的搜索規(guī)模,還可以反應(yīng)出該時(shí)間段內(nèi)熱度漲跌態(tài)勢(shì),準(zhǔn)確及時(shí)反映突發(fā)事件網(wǎng)絡(luò)輿情的變化情況。搜索指數(shù)的出現(xiàn),對(duì)市場(chǎng)分析與決策具有重要且深遠(yuǎn)的意義。

網(wǎng)絡(luò)爬蟲(Web Crawler)技術(shù)是一種快速獲取搜索指數(shù)相關(guān)信息的全新手段。本文在概述網(wǎng)絡(luò)爬蟲關(guān)鍵技術(shù)的基礎(chǔ)上,以“搜狗搜索”為研究對(duì)象,詳細(xì)介紹了一款基于網(wǎng)絡(luò)爬蟲技術(shù)的搜索指數(shù)獲取工具的研究與實(shí)現(xiàn)。

1 關(guān)鍵技術(shù)

1.1 Python爬蟲

Python是一款開源的,可以運(yùn)行在任何主流操作系統(tǒng)中的解釋性高級(jí)編程語言。Python簡潔的語法可以高效的節(jié)約開發(fā)者的開發(fā)時(shí)間以及開發(fā)成本。網(wǎng)絡(luò)爬蟲是用來獲取網(wǎng)絡(luò)數(shù)據(jù)的重要工具。關(guān)于網(wǎng)絡(luò)爬蟲技術(shù)的研究不計(jì)其數(shù)。爬蟲程序使用Python的一個(gè)重要因素,就是Python為爬蟲開發(fā)提供了豐富的標(biāo)準(zhǔn)庫以及強(qiáng)大的第三方庫。爬蟲程序完全模擬瀏覽器訪問網(wǎng)站的流程,首先使用requests庫請(qǐng)求網(wǎng)站,得到網(wǎng)站所有的HTML數(shù)據(jù),Requests的Get,Post等四種請(qǐng)求方式,包括了所有的HTTP/HTPPS的請(qǐng)求方式,比其他語言(C、C++、Java)方便快捷。然后辨別返回的結(jié)果,如果返回的是HTML格式的數(shù)據(jù),則可以使用lxml庫去解析網(wǎng)頁,通過節(jié)點(diǎn)提取等一些常規(guī)方法,提取出真正需要的數(shù)據(jù)。如果返回的是json格式的數(shù)據(jù),則可以通過json解析獲取數(shù)據(jù)。這兩步包含了數(shù)據(jù)抓取的核心的部分,基本可以得到想要的數(shù)據(jù)。

1.2 通用爬蟲工作流程

網(wǎng)絡(luò)爬蟲的基本工作流程如下:

(1)選取合適的起始URL,放入U(xiǎn)RL隊(duì)列;

(2)從待爬取URL隊(duì)列中取出URL,由網(wǎng)頁下載模塊下載URL對(duì)應(yīng)的網(wǎng)頁HTML,傳遞給數(shù)據(jù)解析模塊之后將URL放進(jìn)己爬取URL隊(duì)列;

(3)數(shù)據(jù)解析模塊解析收到的HTML,查找標(biāo)簽,提取出標(biāo)簽內(nèi)所需數(shù)據(jù),傳遞至數(shù)據(jù)清洗模塊,經(jīng)提取后將URL傳遞至URL調(diào)度模塊;

(4)調(diào)度模塊收到解析模塊傳遞過來的URL后,將其和己抓取的URL隊(duì)列對(duì)比,進(jìn)行去重處理,篩選出未爬取的URL放入待爬取URL隊(duì)列;

(5)網(wǎng)絡(luò)爬蟲系統(tǒng)在2~4步循環(huán),直到待爬取隊(duì)列中的URL全部爬取完畢,或者用戶終止進(jìn)程;

(6)數(shù)據(jù)清洗模塊發(fā)現(xiàn)并糾正數(shù)據(jù)文件中可識(shí)別的錯(cuò)誤,最終將數(shù)據(jù)存入數(shù)據(jù)庫。

2 研究對(duì)象、數(shù)據(jù)來源及目標(biāo)

2.1 研究對(duì)象

指數(shù)平臺(tái)是新型的平民化的數(shù)據(jù)展示平臺(tái),他旨在普及大數(shù)據(jù)在民眾日常生活中的使用。搜狗指數(shù)是以搜狗搜索平臺(tái)上海量網(wǎng)民行為數(shù)據(jù)為基礎(chǔ)的數(shù)據(jù)分享平臺(tái),為用戶提供數(shù)據(jù)支持。本文以搜狗指數(shù)為研究對(duì)象,詳細(xì)描述網(wǎng)絡(luò)爬蟲技術(shù)的應(yīng)用方法。

數(shù)據(jù)來源:此次研究為搜狗指數(shù),實(shí)現(xiàn)定向爬取,目標(biāo)地址為http://sogou.index.com(搜狗指數(shù)官網(wǎng))。

2.2 爬取目標(biāo)

本文以爬取搜狗指數(shù)網(wǎng)站“我不是藥神”詞條為案例,詳述通過網(wǎng)絡(luò)爬蟲技術(shù)獲取“我不是藥神”的搜狗指數(shù)的過程與方法,以及在爬取數(shù)據(jù)過程中會(huì)出現(xiàn)的問題和解決策略。

3 實(shí)現(xiàn)過程與技術(shù)難點(diǎn)

3.1 數(shù)據(jù)搜索入口URL

目標(biāo)地址為http://index.sogou.com(搜狗指數(shù))與其他網(wǎng)站相比具有特殊性,即數(shù)據(jù)請(qǐng)求接口為獨(dú)立網(wǎng)址,需通過抓包的方式獲取精確的數(shù)據(jù)接口并傳入需求數(shù)據(jù):接口為http://index.sogou.com/getDateData,需傳入的數(shù)據(jù)為:關(guān)鍵字(keyword),起始日期(start_date),結(jié)束日期(end_date),代碼如下:

import datetime

oft=“http://index.sogou.com/getDateData”

#把數(shù)據(jù)的字符串類型的時(shí)間轉(zhuǎn)換成時(shí)間格式

params={

'kwdNamesStr':keyword,

'start])ate':start_date,

'endDate':end_date,

'dataType':'SEARCH_ALL',

'queryType':'INPUT',

}

五個(gè)字段從上到下的含義分別為:

'kwdNamesStr':搜索的關(guān)鍵字,'startDate':請(qǐng)求數(shù)據(jù)的起始日期,'endDate'::請(qǐng)求數(shù)據(jù)的起始日期,'dataType':請(qǐng)求的數(shù)據(jù)類型,'queryType'查詢的方式。

3.2 獲取網(wǎng)頁數(shù)據(jù)

使用requests的get方法。requests的get方法將傳入數(shù)據(jù)寫進(jìn)字典格式的數(shù)據(jù)結(jié)構(gòu)并傳給requests方法的params字段。該網(wǎng)站的請(qǐng)求必須有瀏覽器信息,所以需要給請(qǐng)求添加請(qǐng)求頭,模仿瀏覽器對(duì)網(wǎng)站進(jìn)行訪問。請(qǐng)求成功之后,返回的數(shù)據(jù)為json字符串,目標(biāo)數(shù)據(jù)包含在其中,實(shí)現(xiàn)代碼如下:

import requests

HEADERS={

'Accept':'*/*',

'Accept-Encoding':'gzip,deflate',

'Accept-Language':'zh-CN,zh;q-0.9',

'Connection':'keep-alive',

'Host':'index.sogou.com',

'User-Agent':'Mozilla/5.0(Windows NT6.1;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/62.0.3202.75 Safari/537.36',

}

#防止程序假死,添加請(qǐng)求超時(shí)

web_data=requests.get(URL,headers=HEADERS,params=params,timeout=30)

return web_data

3.3 解析數(shù)據(jù)

通過解析得到的是]son字符串,所以需要把將其轉(zhuǎn)換成lson匹配的數(shù)據(jù)類型,然后使用Python的字典數(shù)據(jù)獲取方法,得到目標(biāo)數(shù)據(jù)。搜狗指數(shù)包含在data字段的pvList中,取兩次key-value值即可獲得目標(biāo)數(shù)據(jù),代碼如下:

import json

detail_data=json.loads(web_data.content)

date_datas=detail data['data']['pvList']

if not data_datas:

return

3.4 數(shù)妮清洗與整理

前幾步工作獲取的數(shù)據(jù)格式不規(guī)范,接下來對(duì)數(shù)據(jù)進(jìn)行重新整理,日期改寫成:‘2018-01-01格式,指數(shù)數(shù)值改寫為int類型。將最終的數(shù)據(jù)保存到一個(gè)列表數(shù)據(jù)結(jié)構(gòu)中返回給用戶,代碼如下:

result=[]

for date_data in date_datas:

for each_data in date_data:

year=str(each_data['date'])[0:4]

month=str(each_data['date'])[4:6]

day=str(each_data['date'])[6:8]

dates=year+'-'+month+'-'+day

result_each_data=dates,int(each_data['pv'])

result.append(result_each_data)

return result

最后,將獲取的數(shù)據(jù)存儲(chǔ)于非關(guān)系型數(shù)據(jù)庫MongoDB中。

3.5 數(shù)據(jù)驗(yàn)證

查詢電影“我不是藥神”上映前后兩天與上映當(dāng)天數(shù)據(jù),日期為2018.7.3-2018.7.7的具體數(shù)據(jù),得到的結(jié)果為:

[('2018-07-03',70808),('2018-07-04',132629),('2018-07-05',283926),('2018-07-06',472971),('2018-07-07',587893),],與網(wǎng)站完全相同,表明程序通過測(cè)試。

3.6 技術(shù)難點(diǎn)

搜狗指數(shù)網(wǎng)站在阻止爬蟲工具爬取數(shù)據(jù)方面十分嚴(yán)格,如何繞過防護(hù)是工具開發(fā)的技術(shù)難點(diǎn)。開發(fā)者需要全面?zhèn)窝b爬蟲程序,將解析格式、主機(jī)地址等詳細(xì)信息寫入請(qǐng)求頭,保證網(wǎng)站獲取的訪問請(qǐng)求是一個(gè)正常的用戶訪問,以保證數(shù)據(jù)的正確性和完整性。

4 結(jié)語

本文構(gòu)建了基于Python的抓取搜狗指數(shù)的爬蟲工具,抓取電影“我不是藥神”上映前后兩天與當(dāng)天網(wǎng)民搜索行為數(shù)據(jù)。爬取數(shù)據(jù)與搜狗指數(shù)網(wǎng)站公布數(shù)據(jù)完全相同,表明通過該爬蟲可以高效快捷的得到所有數(shù)據(jù),高效的為數(shù)據(jù)研究提供真實(shí)數(shù)據(jù)。

參考文獻(xiàn)

[1]陳濤,林杰.基于搜索引擎關(guān)注度的網(wǎng)絡(luò)輿情時(shí)空演化比較分析-以谷歌趨勢(shì)和百度指數(shù)比較為例[J].情報(bào)雜志,2013,32(03):7-10,16.

[2]于娟,劉強(qiáng).主題網(wǎng)絡(luò)爬蟲研究綜述[J].計(jì)算機(jī)工程與科學(xué),2015,37(02):231-237.

[3]陳政伊,袁云靜,賀月錦等.基于Python的微博爬蟲系統(tǒng)研究[J].大眾科技,2017,19(08):8-11.

[4]PINKERTON B.Finding what people want:experiences with the WebCrawler[EB/OL].[2010-10-10].http://www.webir.org/resoruces/phd/pinkerton_2000.pdf.

[5]AHMADI-ABKENARI F,SELAMAT A.An architecture for a focusedtrend parallel Web crawler withthe application of clickstreamanalysis[J].Information Sciences,2012,184(01):266-281.

[6]周立柱,林玲.聚焦爬蟲技術(shù)研究綜述[J].計(jì)算機(jī)應(yīng)用,2005,25(09):1965-1969.

[7]李斌譯.RICHARD L.用Python寫網(wǎng)絡(luò)爬蟲[M].北京:人民郵電出版社,2016.

猜你喜歡
指數(shù)爬蟲
利用網(wǎng)絡(luò)爬蟲技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
保險(xiǎn)業(yè)務(wù)數(shù)據(jù)質(zhì)量指標(biāo)體系及指數(shù)研究
基于彈性系數(shù)的“雙創(chuàng)”指數(shù)構(gòu)建方法研究
404 Not Found

404 Not Found


nginx
民勤县| 偃师市| 丹江口市| 鄢陵县| 奉新县| 南京市| 香格里拉县| 南江县| 德兴市| 阆中市| 车险| 瓦房店市| 安仁县| 株洲县| 海南省| 邻水| 色达县| 芦山县| 凤台县| 商都县| 前郭尔| 日喀则市| 大渡口区| 枝江市| 鸡泽县| 灵山县| 前郭尔| 湖北省| 五大连池市| 桦甸市| 乡城县| 怀来县| 隆回县| 乌鲁木齐市| 太白县| 房山区| 吉首市| 乐山市| 威远县| 商水县| 浮梁县|