所謂爬蟲,首先要通過各種手段爬取到想要站點(diǎn)的數(shù)據(jù)。 web2.0之后,各種網(wǎng)絡(luò)站點(diǎn)類型越來越多,早期的站點(diǎn)多為靜態(tài)頁面【html 、htm】,后來逐步加入 jsp。asp,等交互性強(qiáng)的頁面。再后來隨著js的興起,也處于站點(diǎn)的美觀和易于維護(hù),越來越多的ajax異步請求方式數(shù)據(jù)站點(diǎn)。[不扯犢子了 ,馬上上示例]
??????參與工作時(shí)間不是很長,但工作期間一直做不同的爬蟲項(xiàng)目。對常見的頁面數(shù)據(jù)獲取,有一些簡單的認(rèn)識(shí)。 ?接觸到的頁面分為三類。
??A 靜態(tài)頁面(數(shù)據(jù)在源碼中直接可以獲取到)
?B數(shù)據(jù)在基源碼中沒有,攜帶請求數(shù)據(jù)請求,在瀏覽器解析過程中,封裝出含數(shù)據(jù)的源碼
?C數(shù)據(jù)在瀏覽器解析后的源碼中 沒有,是通過頁面的js函數(shù),調(diào)用請求的js數(shù)據(jù),顯示的。
分別舉個(gè)例子以示說明:
A ,這一類最簡單,例如百度首頁 ,現(xiàn)在想獲取它的頁面顯示的鏈接信息
查看源碼
不難發(fā)現(xiàn)頁面中的鏈接信息在源碼中都有體現(xiàn),直接寫正則
<a\s[^>]*?href\s*=[^\\]\s*['"]?([^'"\s>*?]*)[^>]*>[\s\S]*?(.*?)[</a>].+?
在RegexBuddy 3 工具中
通過去group 1 [鏈接] group[Aname] 取得想要的數(shù)據(jù),再通過隊(duì)列循環(huán)排除依次取出百度鏈到的所有站點(diǎn)。
B
像企業(yè)類型信息查詢網(wǎng)站 http://qyxy.baic.gov.cn/zhcx/zhcxAction!list.dhtml?op=cx
想要獲取通過程序輸入企業(yè)名稱 ?而查詢出有關(guān)注冊信息
不難發(fā)現(xiàn)當(dāng)人工輸入企業(yè)名稱【2】 是 url【1】中的地址欄并沒有變化,但是 【3】的響應(yīng)結(jié)果卻會(huì)隨著我們查詢的詞不同而響應(yīng)出不通的結(jié)果。
這就是上述的基頁面不變,但是源碼在請求后解析加載顯示的不一樣 。
對于這種情況 我們需要借助工具分析在我們在點(diǎn)擊查詢的操作時(shí)進(jìn)行了那些與服務(wù)器的交互,
通過httpwatcher?
?
通過分析不難發(fā)現(xiàn),在點(diǎn)擊查詢的動(dòng)作時(shí),http請求 通過post方式發(fā)送了一個(gè)請求數(shù)據(jù)到給服務(wù)器端 ?zhcxModel.ent_name ?百度。這樣通過程序建立http鏈接時(shí),我們把請求數(shù)據(jù)推送給服務(wù)器
?
然后再接收數(shù)據(jù)源碼,這是源碼中就含有查詢出來的信息了,再通過A的方式,把想要的信息通過正則取出來。
C 例如土豆的用戶信息頁面 http://www.tudou.com/home/tui/u57045481t2.html 【隨便拿了一個(gè)頁面,若牽涉?zhèn)€人隱私,請聯(lián)系我,我會(huì)立馬更改】
?
想抓取土豆的粉絲數(shù),關(guān)注數(shù),及粉絲的詳細(xì)信息
這個(gè)頁面查看源碼 看不到保護(hù)焊有粉絲數(shù) 1327【1】等 及 粉絲的名稱、鏈接等【2】信息
通過httpwatcher 重新請求頁面 ,記錄與服務(wù)器交互的數(shù)據(jù),
不難發(fā)現(xiàn)?
粉絲數(shù) 信息 在請求時(shí) 發(fā)送的這個(gè)鏈接
http://www.tudou.com/my/tui/userInfo.html?uid=57045481&callback=jQuery16408569448299658144_1366125895716&_=1366125895774 中體現(xiàn),再看藍(lán)色圈中的數(shù)據(jù)即為該用戶的id信息,在初始URL中也含有。這樣就不難總結(jié)出 用戶的關(guān)注人信息 數(shù)據(jù) 通過拼接 http://www.tudou.com/my/tui/userInfo.html?uid= + 用戶ID + &callback=jQuery ??即可獲得。
再看
【2】粉絲人信息
與上述方法差不多 ,探尋到發(fā)送的js請求,獲取json數(shù)據(jù) 。
像翻頁類型的數(shù)據(jù),1327個(gè)服務(wù)器端沒有一次請求把所有數(shù)據(jù)加載過來,
觀察粉絲人數(shù)的js請求地址 ,有兩個(gè)參數(shù)pageSize currentPage 。pageSize 用來顯示每一頁顯示多少個(gè),currentPage用來顯示當(dāng)前頁,頁面中有總頁數(shù)111,同時(shí)在剛探尋的js中也有總頁數(shù)的信息,這樣就很容易的通過變換currentPage 的值來依次通過A的方式去到用戶的頭像 ,姓名,等信息了。
不早了,明兒還得干活兒 ,今天就先到這兒了,這個(gè)目前接觸到的一些類型數(shù)據(jù)分析,當(dāng)然還有更復(fù)雜些的,接觸面有限,等后續(xù)發(fā)現(xiàn)和學(xué)習(xí)我會(huì)陸續(xù)補(bǔ)充上的 。
歡迎指正和交流學(xué)習(xí)
爬蟲技術(shù)交流_crawler QQ群:167047843
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
