點擊上方 月小水長 並 設爲星標,第一時間接收乾貨推送
熟悉這個微博超級話題爬蟲系列的都知道,我已經中止對有GUI功能集中版本的維護了,集中精力維護無GUI版本功能獨立版本的開發和維護,而且保證每一個功能都是最小可用產品且互不干擾。可是功能獨立版本一直有個歷史遺留問題:沒有將集中版本中爬取每一個用戶的全部微博的功能獨立出來,恰好今天有空,我也以爲是時候寫點東西了,因而就有了這篇文章。
web
總體的剝離過程來算比較輕鬆,由於功能集中版本每一個功能都有一個相對獨立的類,這個用戶微博爬蟲就是一個 WeiboUserScrapy 類,只不過在集中版本中爲了和其餘功能模塊進行通訊和協調,引進了 PyQT5 的信號量,以及一些公共配置變量,獨立時將這些東西去掉便可。json
代碼的地址放在文末閱讀原文,拿到代碼後,你須要作的兩件事依次是:微信
-
更換代碼中的 Cookie -
把 user_id 改爲你想要爬取的用戶 id(是純數字)
{user_id}_{nickname}_{weibo_num}博_{followers}粉_{following}關注.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頁的所有微博
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))
本文分享自微信公衆號 - 月小水長(inspurer)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。dom