一個(gè)爬取用戶所有微博的爬蟲(chóng),還能斷網(wǎng)續(xù)爬那種
? ? 點(diǎn)擊上方?月小水長(zhǎng)?并?設(shè)為星標(biāo),第一時(shí)間接收干貨推送
熟悉這個(gè)微博超級(jí)話題爬蟲(chóng)系列的都知道,我已經(jīng)停止對(duì)有GUI功能集中版本的維護(hù)了,集中精力維護(hù)無(wú)GUI版本功能獨(dú)立版本的開(kāi)發(fā)和維護(hù),并且保證每個(gè)功能都是最小可用產(chǎn)品且互不干擾。但是功能獨(dú)立版本一直有個(gè)歷史遺留問(wèn)題:沒(méi)有將集中版本中爬取每個(gè)用戶的所有微博的功能獨(dú)立出來(lái),剛好今天有空,我也覺(jué)得是時(shí)候?qū)扅c(diǎn)東西了,于是就有了這篇文章。
整體的剝離過(guò)程來(lái)算比較輕松,因?yàn)楣δ芗邪姹久總€(gè)功能都有一個(gè)相對(duì)獨(dú)立的類,這個(gè)用戶微博爬蟲(chóng)就是一個(gè) WeiboUserScrapy 類,只不過(guò)在集中版本中為了和其他功能模塊進(jìn)行通信和協(xié)調(diào),引進(jìn)了 PyQT5 的信號(hào)量,以及一些公共配置變量,獨(dú)立時(shí)將這些東西去掉即可。
代碼的地址放在文末閱讀原文,拿到代碼后,你需要做的兩件事依次是:
更換代碼中的 Cookie 把 user_id 改成你想要爬取的用戶 id(是純數(shù)字)
{user_id}_{nickname}_{weibo_num}博_{followers}粉_{following}關(guān)注.csv' 格式的文件,爬取的微博都保存在這里。
user_page_config?=?'user_page.json'
if?not?os.path.exists('user_page.json'):
????page?=?1
????with?open(user_page_config,'w',?encoding='utf-8-sig')?as?f:
????????f.write(json.dumps({f'{self.user_id}':page},?indent=2))
else:
????with?open(user_page_config,'r',?encoding='utf-8-sig')?as?f:
????????page?=?json.loads(f.read())[f'{self.user_id}']
random_pages?=?random.randint(1,?5)
for?page?in?range(page,?page_num?+?1):
????self.get_one_page(page)??#?獲取第page頁(yè)的全部微博
????with?open(user_page_config,'r',?encoding='utf-8-sig')?as?f:
????????old_data?=?json.loads(f.read())
????????old_data[f'{self.user_id}']?=?page
????with?open(user_page_config,'w',?encoding='utf-8-sig')?as?f:
????????f.write(json.dumps(old_data,?indent=2))

評(píng)論
圖片
表情
