Python爬蟲過程中遇到微博since_id怎樣處理
????在崔慶才《網(wǎng)絡爬蟲開發(fā)實戰(zhàn)》第6.3小節(jié)中,舉出Ajax數(shù)據(jù)爬取的一個實例,即使用Python爬取微博數(shù)據(jù)。但著書時間相對較早,原本的請求URL中用‘page’就可以實現(xiàn)翻頁,如今卻是使用‘since_id’。

????但在仔細觀察后我們便可發(fā)現(xiàn),since_id的值在第一頁為‘’,也就是沒有,而下一頁的since_id,是可以在上一頁的 預覽--data--cardlistinfo 中找到的。意思是,上一頁微博瀏覽到這一條,下一頁微博從這一條開始。

????當時的我挺懵逼的,這必得要 get_since_id 啊,可你也得先 get_page 啊,可你不知道since_id 怎么 get_page 啊。。。。。。

????但當我在網(wǎng)上尋求答案時,發(fā)現(xiàn)了global這個方法,它可以改變函數(shù)外的數(shù)值。大概就像這樣:

????原本函數(shù)內(nèi)的x是封裝在函數(shù)里的,與外界沒有關系,但global就把它們聯(lián)系起來了。
????所以,我們可以在函數(shù)外命令since_id為‘’,然后通過global迭代改變它的值。是不是感覺這樣一個無限循環(huán)的問題可以解決了?

代碼附上:

結果大概是這樣的:

詳細代碼:
import requests
from pymongo import MongoClient as mc
from pyquery import PyQuery as pq
#basic_info#
basic_url='https://m.weibo.cn/api/container/getIndex?type=uid&value=2830678474&containerid=1076032830678474'
since_id=''
final_url=basic_url+'&since_id='+str(since_id)
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74'}
first_result=requests.get(final_url,headers=headers)
second_result=first_result.json()
third_result=second_result.get('data')
#get_since_id#
def get_since_id():
? ? global since_id
? ? forth_result=third_result.get('cardlistInfo').get('since_id')
? ? return since_id? ?
#get_page#
def get_page(since_id):
? ? fifth_results=third_result.get('cards')
? ? for fifth_result in fifth_results:
? ? ? ? six_result=fifth_result.get('mblog')
? ? ? ? weibos={}
? ? ? ? weibos['comments']=six_result.get('comments_count')
? ? ? ? weibos['text']=pq(six_result.get('text')).text()
? ? ? ? yield weibos
#main#
def main():
? ? since_id=''
? ? for i in range(1,11):
? ? ? ? print('page_{}'.format(i))
? ? ? ? weibos=get_page(since_id)
? ? ? ? for weibo in weibos:
? ? ? ? ? ? print(weibo)
? ? ? ? since_id=get_since_id()
if __name__=='__main__':
? ? main()
本人非計算機專業(yè)學生,編程也是剛學不久,發(fā)文章出來也是希望大家少像我一樣踩坑,如果有講的不好的地方,請多包涵?。。?/span>