日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python爬取方式_Python 爬虫入门(三)—— 寻找合适的爬取策略

發(fā)布時間:2024/1/23 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬取方式_Python 爬虫入门(三)—— 寻找合适的爬取策略 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

寫爬蟲之前,首先要明確爬取的數(shù)據(jù)。然后,思考從哪些地方可以獲取這些數(shù)據(jù)。下面以一個實際案例來說明,怎么尋找一個好的爬蟲策略。(代碼僅供學(xué)習(xí)交流,切勿用作商業(yè)或其他有害行為)

1).方式一:直接爬取網(wǎng)站 目標(biāo)網(wǎng)址:http://chanyouji.com/ 注意:這個網(wǎng)站會攔截IP,訪問次數(shù)過多,IP會被封,所以,上節(jié)的IP代理就用到了。

a).打開網(wǎng)頁,可以看到這是一個游記類的網(wǎng)站,里面有很多人分享的游記。那我們就爬這些游記。說不定以后有時間出去玩的時候可以用到。

b).點開其中一篇游記,可以看到鏈接地址形式是這樣的  http://chanyouji.com/trips/352140,這個時候,我們可以思考一下,352140這個數(shù)字代表的含義,會不  會是這個游記在數(shù)據(jù)庫的ID,如果是的話,換個數(shù)字會不會得到不一樣的游記,那么我們試一下。訪問  http://chanyouji.com/trips/352141,可以看到,的確得到了不  一樣的游記。截圖如下:

c).從網(wǎng)址上可以得出一個結(jié)論,我們可以通過枚舉來請求到不同的數(shù)據(jù)。但是,這并不一定是可以按照上兩節(jié)的方式來爬取。原因有很多。比如,有些數(shù)據(jù)是通過js渲染  ? 的。對于有web開發(fā)基礎(chǔ)的很好理解,但是對于沒有做過web開發(fā)的同學(xué)解釋一下。假設(shè),我們要買一個房子,房子有很多種,我們分成兩類,一類是毛坯房(就是沒有裝修   ?的),一類是裝修好的。對于毛坯房,我們要買家具,裝修什么的,對于裝修好的我們可以直接用。類比到這個例子中,http://chanyouji.com/trips/*****這個請求就買???   一個房子,毛坯房就是說返回的是這個網(wǎng)站的殼子,需要另外在JS里面重新請求數(shù)據(jù),填充到殼子里面。裝修好的就是,數(shù)據(jù)什么的都填好了,一起給你。

d).那么我們該如何判斷,這兩類的結(jié)果呢。很簡單。以火狐瀏覽器為例,F12打開調(diào)試窗口,找到網(wǎng)絡(luò)->點擊相應(yīng)的請求,可以看到如下界面:

這個請求的所有的數(shù)據(jù)都會顯示在這個里面,然后點開響應(yīng),會看到請求來的源代碼(這個也是我們用爬蟲發(fā)請求的結(jié)果),如圖所示

很慶幸,我們獲取到的是精裝房,可以直接利于上兩節(jié)的知識來解析這個代碼(這里就不贅述了)

e).如果是js渲染的怎么辦呢?我沒在這個網(wǎng)站上找到用js渲染的(這個網(wǎng)站的數(shù)據(jù)還是比較好爬,除了攔截IP之外,沒有多少難度),所以換個目標(biāo)來解釋。

2) 方式二:分析請求 目標(biāo)網(wǎng)址:http://music.163.com/#/user/home?id=48353(丁磊的網(wǎng)易云音樂個人主頁)開始分析方法和上一步一樣,頁面截圖如下:

a).我們發(fā)現(xiàn),http://music.163.com/user/home?id=48353 這個請求返回的值是不是少點什么,對的,就是少了歌單(如果多分析幾個用戶的頁面,你會發(fā)現(xiàn),年齡  也是缺的)

b).我們繼續(xù)尋找那個歌單的數(shù)據(jù)在哪里?

可以看到,http://music.163.com/weapi/user/playlist?csrf_token= 這個請求就是返回的歌單,我們只需要請求這個接口的時候,帶上該有的參數(shù),就能得到這個數(shù)據(jù)。返回的數(shù)據(jù)是json格式,可以拿過來直接用了,不用beautifulsoup解析。另外說一句,這個接口的參數(shù)是加密的,如下圖,網(wǎng)上有破解的,但是不推薦破解,因為只要他們隨便改下密鑰或者加密方式,又要花很大時間來破解。對于這個接口,我們一般參與,分析js(網(wǎng)易云音樂的js也是混淆過的)或者調(diào)用瀏覽器來訪問(這個效率比較低,但是個人來講夠用了)。

3)方式三:另辟蹊徑——利用目標(biāo)網(wǎng)址的APP。這里仍以 蟬游記 為例。APP的接口返回值一般都是JSON,比較好解析,除了網(wǎng)易云音樂(丁磊就該好好養(yǎng)豬)。核心就是攔截APP的請求。

a).在電腦上安裝安卓模擬器(我用的是bluestacks,這個安裝好像有點麻煩)

b).在模擬器中安裝目標(biāo)APP--蟬游記(除了這個方法之外,還可以用電腦開個熱點,用手機連接這個熱點,同樣可以攔截)

c).安裝http analyzer其他的也行,就是攔截http請求用的),打開httpanalyzer

d).使用目標(biāo)APP,這個時候就可以攔截到想要的請求,如圖:

e).請求就是這樣的,這里要注意,https和http的區(qū)別。遇到https的請求,我們先試下用http替換。很慶幸,這個網(wǎng)站可以這樣做,如果不可以的話,比較麻煩,還要導(dǎo)  入證書(暫且不講)。我們把http://chanyouji.com/api/trips/352140.json (為了和方式一同步,把id改成了352140)發(fā)到瀏覽器中請求,結(jié)果如下(說明請求的時候不  需要加任何參數(shù))

f).這些數(shù)據(jù)比較多,很難看。怎么看好看一點呢,就是把它轉(zhuǎn)化成標(biāo)準(zhǔn)的json數(shù)據(jù),我一般用這個工具h(yuǎn)ttp://www.bejson.com/jsonviewernew/

把數(shù)據(jù)復(fù)制過去格式化一下就行了。如下圖所示:

g).順便說一句,python有json解析模塊,可以用。

下面附上蟬游記的爬蟲源碼(僅供學(xué)習(xí)交流!僅供學(xué)習(xí)交流!僅供學(xué)習(xí)交流!)

importurllibimportjsonimportsocket

socket.setdefaulttimeout(10)

proxys=[]

proxys.append({"http":"http://124.251.62.246:80"})

proxys.append({"http":"http://117.78.34.32:80"})

proxys.append({"http":"http://59.108.61.132:808"})for id in range(0,5,1):try:

url= "http://chanyouji.com/api/trips/"+`(352140+id)`+".json"res= urllib.urlopen(url,proxies=proxys[id%3]).read()

res_json=json.loads(res)print res_json['name']exceptException,e:printecontinue

運行結(jié)果:

代碼說明:

a).枚舉可以用循環(huán)

b).res_json=json.loads(res) 就是把結(jié)果轉(zhuǎn)化成json,特別注意,這個res必須要有和json格式一樣(json相關(guān)資料,可自行查閱)。

c).proxys.append()就是往數(shù)組中添加元素

d).id%3就是id處于3取其余數(shù),也就是說 id%3大于等于0,小于等于2。因為代理只有三個,數(shù)組是從零開始。

到此,簡單的爬蟲策略就講完了。

備注:

a).所有內(nèi)容僅供學(xué)習(xí)交流使用

b).如有錯誤,多多指教

c).轉(zhuǎn)載請注明出處

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的python爬取方式_Python 爬虫入门(三)—— 寻找合适的爬取策略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。