Python爬蟲實戰,argparse模塊,Python模擬登錄抓取微博實現數據可視化


前言

今天的目標是寫個爬蟲,爬取目標用戶發的所有微博數據。廢話不多說,讓我們愉快地開始吧~

開發工具

** Python版本:**3.6.4

** 相關模塊:*8

argparse模塊;

DecryptLogin模塊;

lxml模塊;

tqdm模塊;

prettytable模塊;

pyecharts模塊;

jieba模塊;

wordcloud模塊;

以及一些python自帶的模塊。

環境搭建

安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。

注意,DecryptLogin模塊經常更新,所以為了保證能正常用於公眾號內的所有相關例子,請及時升級版本,命令格式如下:

pip install DecryptLogin --upgrade

原理簡介

這里簡單講講整個爬取的流程吧。首先,當然是模擬登錄新浪微博啦,這里還是借助我們之前開源的模擬登錄包來實現微博的模擬登錄。具體而言,代碼實現如下:

'''利用DecryptLogin模擬登錄'''
@staticmethod
def login(username, password):
  lg = login.Login()
  _, session = lg.weibo(username, password, 'mobile')
  return session

然后,讓程序使用者輸入想要爬取的目標用戶id。那么如何獲取這個微博用戶id呢?以劉亦菲的微博為例,首先,進入她的主頁,然后可以看到鏈接里有:

所以劉亦菲的微博用戶id為3261134763。

根據使用者輸入的微博用戶id,我們用已經實現模擬登錄的會話來訪問以下鏈接:

# 鏈接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)

這個鏈接在瀏覽器里顯示大概是這樣的:

顯然,在這,我們可以利用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也一直在變化。

思路就是這么個思路,一些細節的處理就自己看源代碼吧

數據可視化

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

先來看看用她發的所有微博做的詞雲吧(僅原創微博):

然后看看她原創和轉發的微博數量?

以及每年發的微博數量?

果然現在發的微博數量變少了很多。看看她發的第一條微博唄,微博id是zoaIU7o2d,😀:

“大家好,我是劉亦菲”

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

多少轉發量?

以及多少評論?

文章到這里就結束了,感謝你的觀看,關注我每天分享Python模擬登錄系列,下篇文章分享模擬登錄網易雲音樂自動簽到


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM