⑴ Python爬蟲如何寫
Python的爬蟲庫其實很多,像常見的urllib,requests,bs4,lxml等,初始入門爬蟲的話,可以學習一下requests和bs4(BeautifulSoup)這2個庫,比較簡單,也易學習,requests用於請求頁面,BeautifulSoup用於解析頁面,下面我以這2個庫為基礎,簡單介紹一下Python如何爬取網頁靜態數據和網頁動態數據,實驗環境win10+python3.6+pycharm5.0,主要內容如下:
Python爬取網頁靜態數據
這個就很簡單,直接根據網址請求頁面就行,這里以爬取糗事網路上的內容為例:
1.這里假設我們要爬取的文本內容如下,主要包括昵稱、內容、好笑數和評論數這4個欄位:
打開網頁源碼,對應網頁結構如下,很簡單,所有欄位內容都可以直接找到:
2.針對以上網頁結構,我們就可以編寫相關代碼來爬取網頁數據了,很簡單,先根據url地址,利用requests請求頁面,然後再利用BeautifulSoup解析數據(根據標簽和屬性定位)就行,如下:
程序運行截圖如下,已經成功爬取到數據:
Python爬取網頁動態數據
很多種情況下,網頁數據都是動態載入的,直接爬取網頁是提取不到任何數據的,這時就需要抓包分析,找到動態載入的數據,一般情況下就是一個json文件(當然,也敬鏈譽可能是其他類型的文件,像xml等),然後請求解析這個json文件,就能獲取到我們需要的數據,這里以爬取人人貸上面的散標數據為例:
1.這里假設我們爬取的數據如下,主要包括年亮段利率,借款標題,期限,金額,進度這5個欄位:
2.按F12調出開發者工具,依次點擊「Network」->「XHR」,F5刷新頁面,就可以找到動態載入的json文件,具體信息如下:
3.接著,針對以上抓包分析,我們就可以編寫相關代碼來爬取數據了,基本思路和上面的靜態網頁差不多,先利用requests請求json,然後再利用python自帶的json包解析數據就行,如下:
程序運行截圖如下,已經成功獲取到數據:
至此,我們就完成了利用python來爬取網頁數據。總的來說,整個過程很簡單,requests和BeautifulSoup對於初學者來說,非常容易學習,也易掌握,可以學習使用一下,後期熟悉後,可以學習一下scrapy爬蟲框架,可以明顯提高開發效率,非常不錯,當然,網頁中要是有加密、驗證碼等,這個就需要自己好好琢磨,研究對策了,網上也有相關教程和資料,感興趣的話,可以搜一下,希望以上分喚陸享的內容能對你上有所幫助吧,也歡迎大家評論、留言。
⑵ python爬蟲怎麼做
⑶ python鐖鉶鎬庝箞鍋氾紵
澶у埌鍚勭被鎼滅儲寮曟搸錛屽皬鍒版棩甯告暟鎹閲囬泦錛岄兘紱諱笉寮緗戠粶鐖鉶銆傜埇鉶鐨勫熀鏈鍘熺悊寰堢畝鍗曪紝閬嶅巻緗戠粶涓緗戦〉錛屾姄鍙栨劅鍏磋叮鐨勬暟鎹鍐呭廣傝繖綃囨枃絝犱細浠庨浂寮濮嬩粙緇嶅備綍緙栧啓涓涓緗戠粶鐖鉶鎶撳彇鏁版嵁錛岀劧鍚庝細涓姝ユラ愭笎瀹屽杽鐖鉶鐨勬姄鍙栧姛鑳姐
宸ュ叿瀹夎
鎴戜滑闇瑕佸畨瑁卲ython錛宲ython鐨剅equests鍜孊eautifulSoup搴撱傛垜浠鐢≧equests搴撶敤鎶撳彇緗戦〉鐨勫唴瀹癸紝浣跨敤BeautifulSoup搴撴潵浠庣綉欏典腑鎻愬彇鏁版嵁銆
瀹夎卲ython
榪愯宲ipinstallrequests
榪愯宲ipinstallBeautifulSoup
鎶撳彇緗戦〉
瀹屾垚蹇呰佸伐鍏峰畨瑁呭悗錛屾垜浠姝e紡寮濮嬬紪鍐欐垜浠鐨勭埇鉶銆傛垜浠鐨勭涓涓浠誨姟鏄瑕佹姄鍙栨墍鏈夎眴鐡d笂鐨勫浘涔︿俊鎮銆傛垜浠浠/subject/26986954/涓轟緥錛岄栧厛鐪嬬湅寮濡備綍鎶撳彇緗戦〉鐨勫唴瀹廣
浣跨敤python鐨剅equests鎻愪緵鐨刧et()鏂規硶鎴戜滑鍙浠ラ潪甯哥畝鍗曠殑鑾峰彇鐨勬寚瀹氱綉欏電殑鍐呭,浠g爜濡備笅錛
鎻愬彇鍐呭
鎶撳彇鍒扮綉欏電殑鍐呭瑰悗錛屾垜浠瑕佸仛鐨勫氨鏄鎻愬彇鍑烘垜浠鎯寵佺殑鍐呭廣傚湪鎴戜滑鐨勭涓涓渚嬪瓙涓錛屾垜浠鍙闇瑕佹彁鍙栦功鍚嶃傞栧厛鎴戜滑瀵煎叆BeautifulSoup搴擄紝浣跨敤BeautifulSoup鎴戜滑鍙浠ラ潪甯哥畝鍗曠殑鎻愬彇緗戦〉鐨勭壒瀹氬唴瀹廣
榪炵畫鎶撳彇緗戦〉
鍒扮洰鍓嶄負姝錛屾垜浠宸茬粡鍙浠ユ姄鍙栧崟涓緗戦〉鐨勫唴瀹逛簡錛岀幇鍦ㄨ╂垜浠鐪嬬湅濡備綍鎶撳彇鏁翠釜緗戠珯鐨勫唴瀹廣傛垜浠鐭ラ亾緗戦〉涔嬮棿鏄閫氳繃瓚呴摼鎺ヤ簰鐩歌繛鎺ュ湪涓璧風殑錛岄氳繃閾炬帴鎴戜滑鍙浠ヨ塊棶鏁翠釜緗戠粶銆傛墍浠ユ垜浠鍙浠ヤ粠姣忎釜欏甸潰鎻愬彇鍑哄寘鍚鎸囧悜鍏跺畠緗戦〉鐨勯摼鎺ワ紝鐒跺悗閲嶅嶇殑瀵規柊閾炬帴榪涜屾姄鍙栥
閫氳繃浠ヤ笂鍑犳ユ垜浠灝卞彲浠ュ啓鍑轟竴涓鏈鍘熷嬬殑鐖鉶銆傚湪鐞嗚В浜嗙埇鉶鍘熺悊鐨勫熀紜涓婏紝鎴戜滑鍙浠ヨ繘涓姝ュ圭埇鉶榪涜屽畬鍠勩
鍐欒繃涓涓緋誨垪鍏充簬鐖鉶鐨勬枃絝狅細/i6567289381185389064/銆傛劅鍏磋叮鐨勫彲浠ュ墠寰鏌ョ湅銆
Python鍩烘湰鐜澧冪殑鎼寤猴紝鐖鉶鐨勫熀鏈鍘熺悊浠ュ強鐖鉶鐨勫師鍨
Python鐖鉶鍏ラ棬(絎1閮ㄥ垎)
濡備綍浣跨敤BeautifulSoup瀵圭綉欏靛唴瀹硅繘琛屾彁鍙
Python鐖鉶鍏ラ棬(絎2閮ㄥ垎)
鐖鉶榪愯屾椂鏁版嵁鐨勫瓨鍌ㄦ暟鎹錛屼互SQLite鍜孧ySQL浣滀負紺轟緥
Python鐖鉶鍏ラ棬(絎3閮ㄥ垎)
浣跨敤seleniumwebdriver瀵瑰姩鎬佺綉欏佃繘琛屾姄鍙
Python鐖鉶鍏ラ棬(絎4閮ㄥ垎)
璁ㄨ轟簡濡備綍澶勭悊緗戠珯鐨勫弽鐖鉶絳栫暐
Python鐖鉶鍏ラ棬(絎5閮ㄥ垎)
瀵筆ython鐨凷crapy鐖鉶妗嗘灦鍋氫簡浠嬬粛錛屽苟綆鍗曠殑婕旂ず浜嗗備綍鍦⊿crapy涓嬭繘琛屽紑鍙
Python鐖鉶鍏ラ棬(絎6閮ㄥ垎)
⑷ 濡備綍浣跨敤nodejs鍋氱埇鉶紼嬪簭
鐩鏍
鎶撳彇緗戠珯涓婄殑濡瑰瓙鐓х墖銆
絎涓夋柟妯″潡
superagent : 絎涓夋柟Nodejs 妯″潡錛岀敤浜庡勭悊鏈嶅姟鍣ㄥ拰瀹㈡埛絝鐨凥ttp璇鋒眰銆
cheerio : 涓烘湇鍔″櫒絝瀹氬埗鐨凧query瀹炵幇銆
鎬濊礬
閫氳繃superagent 鑾峰彇鐩鏍囩綉絝欑殑dom
閫氳繃cheerio瀵筪om榪涜岃В鏋愶紝鑾峰緱閫氱敤甯冨矓銆
濡傛灉鍙鏄鐖鍙栦竴涓欏甸潰錛屽垯鍙浠ョ洿鎺ュ皢鐩鏍囬〉闈㈢殑鐩鏍囧厓緔犺幏鍙
濡傛灉鏄鍒嗛〉鎴栬呭氫釜欏甸潰錛屽彲浠ラ氳繃寰鐜鑾峰緱鐩鏍囬摼鎺ワ紝榪涜屽氭℃姄鍙栥
瀹炵幇
榪欓噷鎴戜滑瀹炵幇涓涓鎶撳彇緗戠珯濡瑰瓙鐨勭収鐗囥
鐩鏍囩綉鍧錛http://jandan.net/ooxx/ 錛堝逛簬璇ョ綉絝欙紝騫舵病鏈夋伓鎰忔敾鍑葷殑鎰忔.)
浠g爜濡備笅錛
//寮曞叆絎涓夋柟鍜岄氱敤妯″潡
varfs=require('fs');//涓轟簡灝嗘姄鍙栫殑鍥劇墖瀛樺埌鏈鍦幫紝浣跨敤fs
varsuperagent=require('superagent');//寮曞叆superagent
varcheerio=require('cheerio');//寮曞叆jquery瀹炵幇
varfilePath='/node/瀛︿範/sis/img/';//瀹氫箟鎶撳彇濡瑰瓙鏂囦歡瀛樻斁璺寰
varcount=0;//璁板綍鎶撳彇鏁伴噺
vartest=[];
//鎶撳彇涓涓欏甸潰鐨勫疄鐜般
vargetOnePage=function(url){
//鍥犱負鐓庤泲瀵硅鋒眰鍋氫簡闄愬埗錛屾墍浠ュ皢cookie鍔犱笂浜嗐傚傛灉浣犺佽塊棶璇ョ綉絝欑殑璇濓紝鍙浠ラ氳繃嫻忚堝櫒鏌ユ壘cookie騫惰繘琛屾浛鎹
superagent.get(url)
.set({
'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/47.0.2526.111Safari/537.36'
})
.set('cookie','500322148=53;Hm_lvt_=1454117846;Hm_lpvt_=1454119909')
.set({
'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'connection':'keep-alive',
'host':'jandan.net'
})
.end(function(err,sres){//榪欓噷鏄瀵硅幏鍙栫殑dom榪涜屽勭悊
if(err)throwerr;
var$=cheerio.load(sres.text);
varnextUrl=$('.previous-comment-page').attr('href');//鑾峰緱涓嬩竴欏電殑閾炬帴錛屼負浜嗗紑濮嬩笅涓嬈¤鋒眰
$('img').each(function(index,ele){//寰鐜璇ラ〉闈㈢殑鎵鏈夊浘鐗囧苟寰楀埌瀵瑰簲鐨勯摼鎺ワ紝鏀捐繘鏁扮粍銆
varu='';
if($(ele).attr('org_src')){
u=$(ele).attr('org_src');
}else{
u=$(ele).attr('src');
}
test.push(u);
//閫氳繃superagent鑾峰彇鍥劇墖鏁版嵁錛屽苟淇濆瓨鍒版湰鍦般
superagent.get(u).end(function(err,sres){
if(err)throwerr;
//鏍規嵁璁塊棶璺寰勮幏寰楁枃浠跺悕縐
varttt=u.split('/');
varname=ttt[ttt.length-1];
varpath=filePath+name
fs.writeFile(path,sres.body,function(){
count++;
console.log(u);
console.log('宸叉垚鍔熸姄鍙..'+count+'寮');
});
});
});
if(null!=nextUrl&&''!=nextUrl){//浣曟椂寮濮嬩笅涓嬈¤鋒眰
getOnePage(nextUrl);
}
});
};
getOnePage('http://jandan.net/ooxx/');//瑙﹀彂絎涓嬈¤鋒眰寮濮
5. 緇撴灉