1.基于Ajax的新聞網(wǎng)頁動態(tài)數(shù)據(jù)的抓取方法,其特征是,包括如下步驟:
步驟(101):建立新聞網(wǎng)頁爬取內(nèi)容數(shù)據(jù)庫,設(shè)置新聞網(wǎng)頁爬取內(nèi)容數(shù)據(jù)庫的編碼方式;獲得待抓取新聞網(wǎng)頁的新聞列表頁面的URL地址;
步驟(102):訪問待抓取新聞網(wǎng)頁的新聞列表頁面的URL地址,通過瀏覽器開發(fā)者工具判斷新聞列表頁面是否是通過Ajax動態(tài)加載數(shù)據(jù)的;如果是,通過瀏覽器開發(fā)者工具找到Ajax請求的數(shù)據(jù)源;如果不是,就結(jié)束;
步驟(103):判斷Ajax請求的數(shù)據(jù)源和步驟(101)的編碼方式是否一致,如果不一致,則對數(shù)據(jù)源進(jìn)行編碼轉(zhuǎn)換,然后,進(jìn)入步驟(104);如果一致,就直接進(jìn)入步驟(104);
步驟(104):解析數(shù)據(jù)格式:將數(shù)據(jù)源的格式解析成為新聞列表頁面的后臺語言處理的對象格式或者數(shù)組格式;
步驟(105):將步驟(104)解析后的數(shù)據(jù)封裝成對象或數(shù)組類型;判斷封裝是否成功,若成功就直接進(jìn)入步驟(106);否則將數(shù)據(jù)作為字符串來處理;完成后進(jìn)入步驟(106);
步驟(106):將數(shù)據(jù)對象或數(shù)組類型遍歷輸出列表;
步驟(107):利用網(wǎng)絡(luò)爬蟲采集步驟(106)得到的輸出列表;
步驟(108):將采集到的數(shù)據(jù)存儲到數(shù)據(jù)庫中。
2.如權(quán)利要求1所述的基于Ajax的新聞網(wǎng)頁動態(tài)數(shù)據(jù)的抓取方法,其特征是,
所述步驟(101)URL地址包括臨時存在的URL地址、跳轉(zhuǎn)地址、需要添加時間戳參數(shù)或者簽名參數(shù)后訪問到的URL地址;
所述步驟(101)的新聞網(wǎng)頁爬取內(nèi)容數(shù)據(jù)庫的字段包括:新聞標(biāo)題、新聞發(fā)布時間、新聞爬取時間、新聞來源和新聞內(nèi)容;
所述步驟(101)的新聞網(wǎng)頁爬取內(nèi)容數(shù)據(jù)庫的編碼方式包括:UTF-8的編碼方式或GBK編碼方式。
3.如權(quán)利要求1所述的基于Ajax的新聞網(wǎng)頁動態(tài)數(shù)據(jù)的抓取方法,其特征是,所述步驟(102)的瀏覽器開發(fā)者工具包括:谷歌瀏覽器開發(fā)者工具。
4.如權(quán)利要求1所述的基于Ajax的新聞網(wǎng)頁動態(tài)數(shù)據(jù)的抓取方法,其特征是,所述步驟(103)如果Ajax請求的數(shù)據(jù)源存在特殊字符或者亂碼,則把特殊字符或者亂碼進(jìn)行批量替換,轉(zhuǎn)換成為可以進(jìn)行處理的字符。
5.如權(quán)利要求1所述的基于Ajax的新聞網(wǎng)頁動態(tài)數(shù)據(jù)的抓取方法,其特征是,步驟(103):如果編碼方式不同,則將編碼方式統(tǒng)一,統(tǒng)一采用UTF-8的編碼方式。
6.如權(quán)利要求1所述的基于Ajax的新聞網(wǎng)頁動態(tài)數(shù)據(jù)的抓取方法,其特征是,所述步驟(102)和步驟(103)之間設(shè)有步驟如下:
步驟(1020):如果Ajax請求是跨域請求,則通過PHP的CURL方式模擬來路頁面,并通過host來獲取請求數(shù)據(jù)地址;
步驟(1021):如果Ajax請求是POST請求,使用PHP語言http_build_query函數(shù)來模擬HTTP的POST請求,以便獲取到POST請求返回的數(shù)據(jù);
步驟(1022):如果無法獲取數(shù)據(jù)內(nèi)容,則通過PHP的CURL來偽造來路頁面對Ajax請求的數(shù)據(jù)源進(jìn)行訪問;
所述步驟(1020)通過PHP函數(shù)修改Referer來模擬在一個域名下進(jìn)行請求,可以獲得請求數(shù)據(jù)地址返回來的結(jié)果,從而解決了跨域請求沒有權(quán)限獲取數(shù)據(jù)的問題。
7.如權(quán)利要求1所述的基于Ajax的新聞網(wǎng)頁動態(tài)數(shù)據(jù)的抓取方法,其特征是,
所述步驟(104)的步驟如下:
步驟(1041):如果數(shù)據(jù)是JSON格式,則直接進(jìn)入步驟(105);
步驟(1042):如果數(shù)據(jù)是JSONP格式,則進(jìn)行過濾處理;所述過濾處理是將JSONP格式數(shù)據(jù)的請求頭及括弧剔除,然后進(jìn)入步驟(105);
步驟(1043):如果返回的內(nèi)容中出現(xiàn)中英文單雙引號使用不規(guī)范的問題,則通過PHP語言的字符替換函數(shù)進(jìn)行過濾,將特殊字符替換為空字符。
8.如權(quán)利要求1所述的基于Ajax的新聞網(wǎng)頁動態(tài)數(shù)據(jù)的抓取方法,其特征是,
所述步驟(105):
如果步驟(104)解析后的數(shù)據(jù)不是鍵值對類型,則將步驟(104)解析后的數(shù)據(jù)封裝成為數(shù)據(jù)對象,
如果步驟(104)解析后的數(shù)據(jù)是鍵值對類型,則將步驟(104)解析后的數(shù)據(jù)轉(zhuǎn)換成為數(shù)組類型。
9.如權(quán)利要求1所述的基于Ajax的新聞網(wǎng)頁動態(tài)數(shù)據(jù)的抓取方法,其特征是,
所述步驟(106)的輸出列表包括:新聞標(biāo)題、新聞發(fā)布時間、新聞爬取時間、新聞來源、新聞內(nèi)容和新聞鏈接。
10.基于Ajax的新聞網(wǎng)頁動態(tài)數(shù)據(jù)的抓取系統(tǒng),其特征是,包括:
數(shù)據(jù)庫建立模塊:建立新聞網(wǎng)頁爬取內(nèi)容數(shù)據(jù)庫,設(shè)置新聞網(wǎng)頁爬取內(nèi)容數(shù)據(jù)庫的編碼方式;獲得待抓取新聞網(wǎng)頁的新聞列表頁面的URL地址;
訪問模塊:訪問待抓取新聞網(wǎng)頁的新聞列表頁面的URL地址,通過瀏覽器開發(fā)者工具判斷新聞列表頁面是否是通過Ajax動態(tài)加載數(shù)據(jù)的;如果是,通過瀏覽器開發(fā)者工具找到Ajax請求的數(shù)據(jù)源;如果不是,就結(jié)束;
判斷模塊:判斷Ajax請求的數(shù)據(jù)源和步驟(101)的編碼方式是否一致,如果不一致,則對數(shù)據(jù)源進(jìn)行編碼轉(zhuǎn)換,然后,進(jìn)入步驟(104);如果一致,就直接進(jìn)入步驟(104);
解析數(shù)據(jù)格式模塊:將數(shù)據(jù)源的格式解析成為新聞列表頁面的后臺語言處理的對象格式或者數(shù)組格式;
封裝模塊:將解析后的數(shù)據(jù)封裝成對象或數(shù)組類型;判斷封裝是否成功,若成功就直接進(jìn)入輸出模塊;否則將數(shù)據(jù)作為字符串來處理;完成后進(jìn)入輸出模塊;
輸出模塊:將數(shù)據(jù)對象或數(shù)組類型遍歷輸出列表;利用網(wǎng)絡(luò)爬蟲采集得到的輸出列表;將采集到的數(shù)據(jù)存儲到數(shù)據(jù)庫中。