據說想了解一我的要從爬取她(他)的全部微博開始呢~

原文連接

據說想了解一我的要從爬取她(他)的全部微博開始呢~​mp.weixin.qq.com圖標python

導語

既然你已經點進來了,那我就直說吧,標題實際上是我瞎編的,但套路你點進來學習的我是真心的。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頁微博

沒啥特別的技巧,值得一提的處理只有兩點:

  • 每爬20頁微博數據,就保存一次數據,以免爬蟲意外中斷,致使以前已經爬到的數據「人去樓空」;
  • 每爬n頁數據就暫停x秒,其中n是隨機生成的,且n一直在變化,x也是隨機生成的,且x也一直在變化。

思路就是這麼個思路,一些細節的處理就本身看源代碼吧,代碼運行的效果見:
https://zhuanlan.zhihu.com/p/...

代碼運行的命令格式爲:

python weiboSpider.py --username 用戶名 --password 密碼

大功告成啦,完整源代碼詳見相關文件。

數據可視化

老規矩,把爬到的數據拿來可視化一波唄,方便起見,就看看劉亦菲的微博數據可視化效果吧。

先來看看用她發的全部微博作的詞雲吧(僅原創微博):

而後看看她原創和轉發的微博數量?

以及每一年發的微博數量?

果真如今發的微博數量變少了不少。看看她發的第一條微博唄,微博id是zoaIU7o2d,😀:

「你們好,我是劉亦菲」

統計一下她每一年發的原創微博都拿到了多少贊?

多少轉發量?

以及多少評論?

爬的數據很少,就先這樣唄,完整源代碼和數據詳見相關文件~

相關文件

https://github.com/CharlesPikac

相關文章
相關標籤/搜索