微博爬虫思路:Python通过移动端接口爬取,简单易操作
又快到了寫論文的時間了,相信同學對獲取數據都十分的頭大,而要想能學會使用python或者第三方現成的采集器軟件來采集想要的數據,這個學習成本也是不低,那么,拿來主義就是擺在很多同學面前最理想的追求了。
今天,小編就給大家帶來一個Python通過移動端接口爬取的案例,同時用pyinstaller打包成exe,可以幫助大家用最簡單的方式下載到微博的數據,大家如果有需要的可以免費下載使用。
下面我們來看看這個小工具如何使用?
gif動圖 - 富泰科
這是博主:Vsinger_洛天依 的微博:
;
下圖就是采集到的內容,導出到表格當中
我們可以看到數據字段非常的豐富,無論我們想要進行對這些數據進行什么維度的分析,都可以利用到。那么,這個小工具是如何使用呢?
下面我們看一下這個小工具如何下載:
我們可以看到數據就采集出來了,而且會同步下載到本地的表格當中。
是不是非常傻瓜,那么我們的同學們如果選題要用到微博的數據,有了這款小工具就可以節省很多采集數據的時間了。是不是非常nice?
我們下面詳情說一下具體的思路:
首先我們知道:微博有很多不同的終端:如:www.weibo.com/www.weibo.cn/m.weibo.cn,分別對應不同的硬件終端,而我們爬取數據的都知道,獲取數據最快的方式是通過網站的接口。這樣不用瀏覽器的加載,那我們就按這個思路來找一下,是否有相應的接口:
我們打開weibo(我們通過https://m.weibo.cn/這個移動端訪問),登錄后,打開一個大v的首頁 - 下拉 - 打開全部微博。按f12打開開發者工具。
;
然后我們通過網絡調試,就可以看到相應的數據接口了。
;
然后我們看到,所有的數據都在這個mblog下,下面我們就可以寫代碼來獲取了。
1、先獲取用戶的基本信息:
'''用戶信息''' user_name = card['mblog']['user']['screen_name'] profile_url = card['mblog']['user']['profile_url'] post_count = card['mblog']['user']['statuses_count'] desc = card['mblog']['user']['description'] fans = card['mblog']['user']['followers_count'] follow = card['mblog']['user']['follow_count'] gender = card['mblog']['user']['gender'] urank = card['mblog']['user']['urank'] mbrank = card['mblog']['user']['mbrank'] verified = card['mblog']['user']['verified'] if verified:verified = '認證會員' else:verified = '非認證會員'復制
這個container_id 就是用戶的ID,相應的字段都是json格式,我們解析一下就可以。
2、再獲取每一條微博:
for card in data['cards']:if card['card_type'] == 9:mid = card['mblog']['id']uid = card['mblog']['user']['id']bid = card['mblog']['bid']content = card['mblog']['text']content = re.sub(r'<.*?>', '', content) # 通過正則過濾博文當中的html標簽imageUrl = ''video_url = '-'try:for pic in card['mblog']['pics']:imageUrl += pic['url'] + ','imageUrl = imageUrl[:len(imageUrl) - 1]except KeyError as e:imageUrl = ''try:if card['mblog']['page_info']['type'] == 'video':video_url = card['mblog']['page_info']['media_info']['stream_url']except KeyError as e:video_url = '-'source = card['mblog']['source']scheme = 'https://weibo.com/{}/{}?filter=hot&root_comment_id=0&type=comment'.format(card['mblog']['user']['id'], card['mblog']['bid'])created_time = card['mblog']['created_at']復制
3、然后我們再加一下翻頁:
while True:url = f'https://m.weibo.cn/api/container/getIndex?containerid={container_id}&page={page_num}'page_num += 1復制
update:微博好像更新了翻頁的方式,新的翻頁為一個動態參數,我們如下寫一下就好了。
since_id = '' # 翻頁參數 while True:url = f'https://m.weibo.cn/api/container/getIndex?type=uid&value={profile_id}' \f'&containerid=107603{profile_id}&since_id={since_id}'復制
然后設置一下結束翻頁:
total_num = data['cardlistInfo']['total'] if page_num > int(total_num / 10):print('沒有更多頁了')break復制
4、將獲取的內容保存:
'''數據導出到表格當中''' self.excel_save(file_name + '_微博博文.xlsx', items, self.head)復制
5、當然,我們還需要對self.headers設置一下,這里的cookie需要將登錄后的值復制過來。
self.headers = {'cookie': cookie,'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Mobile Safari/537.36 Edg/93.0.961.47'}復制
6、然后,就可以運行一下代碼了。
導出的數據表格:
調試好了,我們如果說想方便使用,可以使用pyinstaller打包一下。打包成exe,可以方便發送和攜帶。下載點這里
當然,這里有義務告知:以上工具下載的數據僅限于用于學習與研究使用,如有需要用于商業用途請取得相應權利人授權。請大家下載時視為同意這個要求,否則請勿下載。如果有超出以上規范或者將獲取的數據應用于超過上述范圍的,因此產生的后果由下載者負責,造成的可能的糾紛或法律后果與本號無關。
總結
以上是生活随笔為你收集整理的微博爬虫思路:Python通过移动端接口爬取,简单易操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 41、OrthoMCL和mcl软件进行基
- 下一篇: java 新区 老区_优学院《土地资源学