欧美一级色视频,簧片在线免费看,美日韩在线,成人观看网站a,亚洲欧美在线一区二区,欧美操穴,欧美综合专区

龍巖易富通網(wǎng)絡(luò)科技有限公司

龍巖小程序開發(fā),龍巖分銷系統(tǒng)

win下wget采集網(wǎng)頁內(nèi)容

2016.05.02 | 2012閱讀 | 0條評論 | shell腳本

需要采集一批數(shù)據(jù),是一網(wǎng)站上的產(chǎn)品信息,產(chǎn)品本身信息很簡單,使用火車采集器輕松實(shí)現(xiàn);但產(chǎn)品價格數(shù)據(jù)是ajax響應(yīng)數(shù)據(jù),使用firebug + live http headers抓到該請求,并測試重發(fā),發(fā)現(xiàn)該ajax請求必須帶一個http頭“X-Requested-With: XMLHttpRequest”,沒有就返回404錯誤。


gnu/linux下有大量的殺手級工具,這種情況,要動用其中的wget. wget有很多參數(shù),這里需要使用其中兩個:-O,--header. 其中:


-O, 把請求結(jié)果保存到指定文件,但我們要使用的卻是一個特殊的值:“-”,它可以將結(jié)果輸出到標(biāo)準(zhǔn)輸出


--header, 結(jié)http請求加上自定義的頭(http header)


于是對于每條產(chǎn)品數(shù)據(jù),都發(fā)送這樣的請求:


wget --header="X-Requested-With: XMLHttpRequest" -O save_123.txt "http://www.website.com/request/path/?Id=123"


這樣每條產(chǎn)品都保存到save_123.txt,save_124.txt,save_125.txt....這樣的一系列文件中。不過有個問題是,每條數(shù)據(jù)一個文件,后期分析不方便。所以將其存儲到單一的文件里。


方案:先將wget結(jié)果指向到標(biāo)準(zhǔn)輸出,然后再使用重定向符 >> 定向到單一的文件里。


不過,還有一個問題,每個http響應(yīng)里沒有產(chǎn)品id號,數(shù)據(jù)跟采集到的產(chǎn)品信息對不上號。于是在每寫一筆采集結(jié)果前,往文件里先寫入該產(chǎn)品的id號。


這里使用echo 命令,要用到echo 的參數(shù):-e, 作用是使用轉(zhuǎn)義符輸出換行。示例:echo -e "aaa\nbbb"


于是構(gòu)造這樣的bash腳本:


echo -e "\n"10011"\t"  >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10011" >>data.log; 

echo -e "\n"10012"\t"  >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10012" >>data.log; 

echo -e "\n"10013"\t"  >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10013" >>data.log; sheep 1;

echo -e "\n"10014"\t"  >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10014" >>data.log; 

echo -e "\n"10015"\t"  >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10015" >>data.log; 

echo -e "\n"10016"\t"  >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10016" >>data.log; sheep 1;


第三行加一個sheep 1, 即每采三條暫停1秒鐘,作用是防止請求過于密集而影響服務(wù)器響應(yīng),暫停秒數(shù)按實(shí)際情況設(shè)置。


所有數(shù)據(jù)都保存到data.log文件里。


其實(shí),對于而需要提取的數(shù)據(jù),完全可以通過grep從定向到標(biāo)準(zhǔn)輸出的wget結(jié)果里提取。只是這里不么做了。


贊 (

發(fā)表評論

南涧| 仙居县| 襄城县| 道孚县| 江永县| 洞头县| 博白县| 祁门县| 彭水| 且末县| 西宁市| 兴义市| 洛扎县| 四会市| 页游| 晋中市| 大城县| 冀州市| 库伦旗| 阜新市| 沙洋县| 高台县| 皋兰县| 徐闻县| 广平县| 东山县| 信宜市| 花莲市| 巧家县| 洪洞县| 南漳县| 八宿县| 罗平县| 固始县| 兰考县| 开封市| 长沙市| 廉江市| 调兵山市| 赞皇县| 淄博市|