據說想了解一我的要從爬取她(他)的全部微博開始呢~mp.weixin.qq.compython
既然你已經點進來了,那我就直說吧,標題實際上是我瞎編的,但套路你點進來學習的我是真心的。git
前兩天發了篇文章:github
從閱讀量能夠看出來了,不少小夥伴對這玩意並不感興趣。看來仍是得多回歸回歸老本行,寫點有趣的腳本,才能套路各位過來學習呀。今天的小目標是寫個小爬蟲,爬取目標用戶發的全部微博數據。廢話很少說,讓咱們愉快地開始吧~session
這裏簡單講講整個爬取的流程吧。首先,固然是模擬登陸新浪微博啦,這裏仍是藉助咱們以前開源的模擬登陸包來實現微博的模擬登陸。具體而言,代碼實現以下:ide
'''利用DecryptLogin模擬登陸''' @staticmethod def login(username, password): lg = login.Login() _, session = lg.weibo(username, password, 'mobile') return session
而後,讓程序使用者輸入想要爬取的目標用戶id。那麼如何獲取這個微博用戶id呢?以劉亦菲的微博爲例,首先,進入她的主頁,而後能夠看到連接裏有:工具
因此劉亦菲的微博用戶id爲3261134763。學習
根據使用者輸入的微博用戶id,咱們用已經實現模擬登陸的會話來訪問如下連接:url
# 連接1 url = f'https://weibo.cn/{user_id}' res = self.session.get(url, headers=self.headers) # 連接2 url = f'https://weibo.cn/{user_id}/info' res = self.session.get(url, headers=self.headers)
這個連接在瀏覽器裏顯示大概是這樣的:spa
顯然,在這,咱們能夠利用xpath提取到目標用戶的一些基本信息:
# 連接1 selector = etree.HTML(res.content) base_infos = selector.xpath("//div[@class='tip2']/*/text()") num_wbs, num_followings, num_followers = int(base_infos[0][3: -1]), int(base_infos[1][3: -1]), int(base_infos[2][3: -1]) num_wb_pages = selector.xpath("//input[@name='mp']") num_wb_pages = int(num_wb_pages[0].attrib['value']) if len(num_wb_pages) > 0 else 1 # 連接2 selector = etree.HTML(res.content) nickname = selector.xpath('//title/text()')[0][:-3]
xpath是啥我就很少廢話了,看下網頁源碼,很容易就能夠寫出來:
提取完以後打印出來讓程序使用者確認一下用本身輸入的用戶id得到的用戶信息是否是和本身想要爬取的用戶信息同樣,等使用者確認信息無誤再開始爬該用戶的微博數據:
# 使用者確認是否要下載該用戶的全部微博 tb = prettytable.PrettyTable() tb.field_names = ['用戶名', '關注數量', '被關注數量', '微博數量', '微博頁數'] tb.add_row([nickname, num_followings, num_followers, num_wbs, num_wb_pages]) print('獲取的用戶信息以下:') print(tb) is_download = input('是否爬取該用戶的全部微博?(y/n, 默認: y) ——> ') if is_download == 'y' or is_download == 'yes' or not is_download: userinfos = {'user_id': user_id, 'num_wbs': num_wbs, 'num_wb_pages': num_wb_pages} self.__downloadWeibos(userinfos)
爬用戶微博數據也基本用的xpath來提取數據,而查看用戶的微博只須要訪問如下這個連接就能夠了:
url = f'https://weibo.cn/{user_id}?page={page}' page表明訪問用戶的第page頁微博
沒啥特別的技巧,值得一提的處理只有兩點:
思路就是這麼個思路,一些細節的處理就本身看源代碼吧,代碼運行的效果見:
https://zhuanlan.zhihu.com/p/...
代碼運行的命令格式爲:
python weiboSpider.py --username 用戶名 --password 密碼
大功告成啦,完整源代碼詳見相關文件。
老規矩,把爬到的數據拿來可視化一波唄,方便起見,就看看劉亦菲的微博數據可視化效果吧。
先來看看用她發的全部微博作的詞雲吧(僅原創微博):
而後看看她原創和轉發的微博數量?
以及每一年發的微博數量?
果真如今發的微博數量變少了不少。看看她發的第一條微博唄,微博id是zoaIU7o2d,😀:
「你們好,我是劉亦菲」
統計一下她每一年發的原創微博都拿到了多少贊?
多少轉發量?
以及多少評論?
爬的數據很少,就先這樣唄,完整源代碼和數據詳見相關文件~