python爬蟲實戰(三) 免登錄微博超話爬蟲+數據可視化

        微博爬蟲可以不借助selenium,直接用Chrome下的手機端模式打開,找到其封裝的json數據,即可爬取,具體步驟如下。

分析過程

        以東野圭吾超話爲例,網址爲微博超話。進入頁面後,使用Chrome瀏覽器的檢查功能,打開手機端模式如下:

在這裏插入圖片描述
        刷新界面,進行抓包,可發現數據的封裝地址。
在這裏插入圖片描述
接下來,我們分析一下翻頁原理,向下滑動界面,對比兩者的URL
在這裏插入圖片描述
在這裏插入圖片描述
不難發現,只有since_id不一樣。那就找到第一條url的json數據,看看有沒有第二條url的since_id。經過分析發現,第二條的url的since_id在第一條url的PageInfo下!這樣,我們就可以翻頁啦!
在這裏插入圖片描述

爬取代碼:

微博反爬還是有點厲害的!一開始,我只用了一個用戶代理,沒爬到幾條數據後就被檢測出來了。然後,換了隨機用戶代理後,IP地址又被封了。所以,還是老老實實構建代理池弄吧。(IP都是網上找的免費可用的,自己可以先用代碼檢測一下活性)

import requests
import json
import re
import os
import time,random
os.chdir('C:/Users/dell/Desktop')
import pandas as pd
from w3lib.html import remove_tags
base_url='''
https://m.weibo.cn/api/container/getIndex?containerid=1008082daf12cb79491a80017ae2546cc6f49f_-_feed&luicode=10000011
&lfid=100103type%3D533%26t%3D10%26q%3D%E4%B8%9C%E9%87%8E%E5%9C%AD%E5%90%BE&since_id=4487749686029266
'''
head_list=["Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16",
    "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14",
    "Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14",
    "Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02",
   ]
ip=['114.101.42.16:65309',
    '220.179.255.7:8118',
    '103.44.145.182:8080',
    '115.223.7.110:80']
proxy={'http':random.choice(ip)}
header={'user-agent':random.choice(head_list)}
pat='since_id=(.*)'
inf=[]
for page in range(1,300):
    try:
        r=requests.get(base_url,headers=header,proxies=proxy)
        df=json.loads(r.text)
        since_id=df.get('data').get('pageInfo').get('since_id')
        data=df.get('data').get('cards')[0].get('card_group')
        for item in data:
            send_time=item.get('mblog').get('created_at')
            content=remove_tags(item.get('mblog').get('text'))
            inf.append([send_time,content])
        base_url=re.sub(pat,'since_id='+str(since_id),base_url)
        print('第{}頁寫入完畢'.format(page))
        time.sleep(random.randint(3,5))
    except:
        print('未爬到數據')
inf1=pd.DataFrame(inf,columns=['發佈時間','內容'])
inf1.to_csv('daily_comment.csv',index=False,encoding='gb18030')

數據可視化

        1. 統計各類書籍總討論次數
在這裏插入圖片描述
《白夜行》、《惡意》、《信》討論較多

2. 按月份統計書籍討論次數
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
從上圖來看,《白夜行》依舊是東野粉的至愛呀,一年中有半年的時間佔討論次數榜首;《惡意》也緊跟其後,分別在1月和8月佔據榜首;《信》在2月和9月佔據榜首;《祈禱落幕時》在4月討論次數最多,《沉默的巡遊》是最近纔出的新書,故佔據了3月的榜首。

3. 統計書中人物的討論次數
在這裏插入圖片描述
亮司和雪穗是《白夜行》的男女主角,石神是《嫌疑人X的獻身》的男主角。而加賀和湯川則是東野圭吾筆下兩個十分有特色的人物。加賀是一名警官,既有縝密的推理能力,心中又有一份溫柔,正因爲如此,所以深受大家喜愛。而湯川是一名物理學家,時常幫助警方處理案件。相對加賀而言,看待事物更加理性、客觀,也深受書迷們的追捧。

4. 討論詞雲圖
在這裏插入圖片描述
5.書籍關聯圖

對微博文字內容進行分詞,並構建共現字典,查看哪些書最容易一起被提到。使用Gephi進行可視化,得到下圖:
在這裏插入圖片描述

上圖的線條越粗,說明兩本書的關聯程度越高!即微博裏的用戶經常一起提到這兩本書。《白夜行》和《惡意》是經常一起被提到!此外,《白夜行》還和《幻夜》一起被提到的(也難怪《幻夜》是《白夜行》的姊妹篇!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章