最近需要一些拍照的指導,想爬取微博里的相冊拾积,m站比pc站好爬,先看看pc的network丰涉。
順利找到網(wǎng)址拓巧,不過pc的分頁方式讓我分方,感覺像是開始以為是時間戳一死,可能是圖片的數(shù)據(jù)庫自生成id肛度,這樣一來就只能一頁24個圖像來爬,很慢投慈。
還是看看m站承耿,要訪問m站,需要的工具伪煤,chrome加袋。
還是先在pc端用chrome開要下載的頁面,比如這次的 黃二疑的相冊
https://weibo.com/p/1005052298961991/photos?from=page_100505&mod=TAB#place
然后F12抱既,左上角防移動端圖標
頁面就會變成這樣
刷新就可以了职烧。
在XHR發(fā)現(xiàn)了數(shù)據(jù)網(wǎng)址。
https://m.weibo.cn/api/container/getSecond?containerid=1078032298961991_-_photoall&page=2&count=24&title=%25E5%259B%25BE%25E7%2589%2587%25E5%25A2%2599&luicode=10000011&lfid=1078032298961991
看了看網(wǎng)址的參數(shù)防泵,page=2&count=24蚀之,應(yīng)該是一次返回多少數(shù)據(jù)的參數(shù),其他的containerid應(yīng)該是博主的id捷泞,假如我想爬其他博主的恬总,只要有了id就能構(gòu)造url來訪問了。
試試先爬100個圖肚邢。
https://m.weibo.cn/api/container/getSecond?containerid=1078032298961991_-_photoall&page=1&count=100&title=%25E5%259B%25BE%25E7%2589%2587%25E5%25A2%2599&luicode=10000011&lfid=1078032298961991
看看結(jié)果:果然回傳100個圖的數(shù)據(jù)壹堰。
接下來的就很簡單了
import requests
import json
import re
import shutil
def mweibo():
url ='https://m.weibo.cn/api/container/getSecond'
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
params ={
'containerid': '1078031353112775_-_photolike',
'page': 1,
'count': 100,
'title': '%E8%B5%9E%E8%BF%87%E7%9A%84%E5%9B%BE%E7%89%87',
'luicode': 10000011,
'lfid': 1078031353112775,
'type': 'uid',
'value': 1353112775}
res = requests.get(url,headers =headers,params=params)
iurl = re.findall('"pic_middle":"(.*?)","pic_', res.text)
for imgurl in iurl:
name = imgurl.split('\\/')[-1]
imgeurl = 'http://wx4.sinaimg.cn/mw1024/' + name
res2 = requests.get(imgeurl, stream=True, headers=headers)
f = open(name, 'wb')
shutil.copyfileobj(res2.raw,f)
f.close()
del res2
回傳的是標準json,為啥沒有用json來解析骡湖,因為微博弄得json及其復雜贱纠,dict先套了一層list又套一層dict再來一層list才到url。這個小伙伴用的json解析
直接用re正則比較快响蕴。
m站的另一個問題是經(jīng)常刷不出數(shù)據(jù)谆焊,原以為是headers沒構(gòu)造好,但是我用手機上m站也是不行浦夷,搞不清楚為啥辖试,好像帶著登陸之后的cookies要好點辜王,就直接導致數(shù)據(jù)時有時無,有點憂傷罐孝。