摸魚神器——使用Python自製微博熱搜榜

2020-12-15 三河講Python

呀呀呀呀呀~今天的小分享貌似只通過新浪微博涉獵熱點...於是我就在想,如果大家上班摸魚[先聲明,我從不摸魚!],又不方便打開新浪那麼大的logo界面八卦,就可以通過命令行一鍵實時觀察我們的熱搜榜。嘻嘻嘻,我可真skr小機靈鬼呢!效果如下:

思考

這個功能在腦殼裡萌芽~就得思考如何實現,其實大概思路非常簡單

獲取實時熱搜榜數據將實時數據在圖形界面中顯示出來

但是,具體的實現邏輯以及細節處理在編程中仍然是值得思考的東西~於是,我們就開始叭!

爬爬爬

要緊之事,就是來爬數據。跟著我左手右手一起打開微博,查看完整的微博熱搜榜,連結如下:https://s.weibo.com/top/summary

需求如下:獲取 熱搜序號,熱搜關鍵字,熱搜點擊量

解析頁面

明確需求之後不要捉急,我們需要解析頁面

通過F12打開開發者工具select選中熱搜榜

解析結果:整個熱搜榜數據就是一個table結構,每一條熱搜都是table下的一條的tr

但是目前,我們只看到了大體的框架,還需進一步確認數據是否在 tr 中,以 李佳奇的牙 這條為例。沒毛病,就在這。

但是仍然不要膨脹奧,記得確認數據是否在該url的network或者preview中。

奧拉~大家發現這個數據也沒涉及到啥反爬~所以今天為了讓大家有額外的收穫,我們使用類來實現該過程[也是為了後面~的騷操作]。

擼阿擼代碼

import requests # 使用 requests 進行請求數據from lxml import etree # 使用 lxml 進行解析數據# 定義 WbHot 類class WbHot(object):# 定義構造方法,初始化 url 以及 headers def __init__(self): self.url = "https://s.weibo.com/top/summary?cate=realtimehot" self.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"} # 定義 獲取html文本數據 方法 def get_hot_html(self): # 發送請求 hot_response = requests.get(url=self.url, headers=self.headers) # 接收文本數據 hot_html = hot_response.text # 將數據返回 return hot_html # 解析 html 頁面 def parse_html(self): # 獲取 html文本 數據 hot_html = self.get_hot_html() # 將 html文本 轉為可解析的html對象 hot_html = etree.HTML(hot_html) # 通過xpath定位到 tr對象列表(裡面每個元素都為一個熱搜對象) pos_tr = hot_html.xpath('//div[@id="pl_top_realtimehot"]/table/tbody/tr') # 定義關鍵詞列表 hot_title_li = [] # 定義點擊量列表 hot_click_li = [] # 定義序號列表 hot_order_li = [] # 遍歷tr對象列表,注意:去除第一個tr對象,因為其是箭頭往上走的。 for per_tr in pos_tr[1::]: # 獲取每條熱搜關鍵字 且為[] hot_title = per_tr.xpath('./td[@class="td-02"]/a/text()') # 但是不想 hot_title_li 變為 [[],[]]..所以使用extend進行擴展 hot_title_li.extend(hot_title) # 獲取每條熱搜點擊量 hot_click = per_tr.xpath('./td[@class="td-02"]/span/text()') hot_click_li.extend(hot_click) # 獲取每條熱搜序號 hot_order = per_tr.xpath('./td[@class="td-01 ranktop"]/text()') hot_order_li.extend(hot_order) # 將3個列表返回 return hot_title_li,hot_click_li,hot_order_liwb_hot = WbHot()wb_hot.parse_html()

OK,代碼在此處打住,我們來看下三個列表是啥玩意兒

我們發現,三個列表中一一對應的數據實際上就是每條熱搜的數據。比如:["李佳奇...","5008...","1"]

如果只要這樣子表示,我們通過zip()就可以實現。但是,事實並沒有我們想像的那麼簡單,如果需要在圖形界面中顯示出來,我們需要將每條熱搜的數據以字符串表示出來,比如:"李佳奇...5008...1"

代碼實現如下:

def cope_data(self): # 接收三個列表的數據 title_li,click_li,order_li = self.parse_html() # 將其打包每一條數據 all_data = list(zip(title_li,click_li,order_li)) # 將列表中的數據拼接為字符串 c_data = [" ".join(list(data)) for data in all_data] # 將字符串列表返回 return c_datawb_hot = WbHot()wb_hot.cope_data()

爬虫部分就完成啦~但是注意,在這裡不要使用主程序入口,否則在打造頁面時沒法訪問到爬蟲數據。

打造界面

現在我們新建一個 xlwb_test.py 文件來實現圖形界面的繪製。在 python 中,有 PyQt5 或者 Tkinter 等庫實現圖形界面,也就是在桌面彈出一個窗口,跟你打開的app類似~

在今天,我們使用PyQt5 來實現,代碼如下:

import sysfrom PyQt5.QtGui import QIconfrom PyQt5.QtWidgets import (QWidget, QToolTip,QPushButton, QApplication)from PyQt5.QtGui import QFontfrom weibo import WbHotclass Example(QWidget): def __init__(self): super().__init__() self.initUI() # 界面繪製交給InitUi方法 def initUI(self): # 調用wb,接收處理好的字符串列表 wb_hot = WbHot() h_data = wb_hot.cope_data() # 這種靜態的方法設置一個用於顯示工具提示的字體。我們使用10px滑體字體。 QToolTip.setFont(QFont('SansSerif', 10)) # 初始化count,來控制移動窗口的位置 count = 0 # 循環遍歷前30條熱搜 for data in h_data[:30]: # 創建一個PushButton並為他設置一個tooltip btn = QPushButton(f'{data}', self) # btn.sizeHint()顯示默認尺寸 btn.resize(btn.sizeHint()) # 移動窗口的位置 btn.move(0, 20+count) count+=20 # 設置窗口的位置和大小 self.setGeometry(300, 70, 400, 600) # 設置窗口的標題 self.setWindowTitle('今日熱搜榜') # 設置窗口的圖標,引用當前目錄下的web.png圖片 self.setWindowIcon(QIcon('wb.png')) # 顯示窗口 self.show()if __name__ == '__main__': # 創建應用程式和對象 app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())

又快迎來小長假~思緒已經開始起飛,希望自己在國慶可以讀兩本可以讀懂並有收穫的書,還在涉獵中。當然別忘emmm點讚~康桑思密達

相關焦點

  • 「熱搜回來了」,登上微博熱搜榜!
    關注全球新冠肺炎疫情動態,請點擊↓↓↓在暫停更新一周後,今日(17日)下午3點,微博熱搜回來了!有何變化?每經小編(微信號:nbdnews)注意到,相比此前廣告、娛樂等話題「霸榜」,新回歸的熱搜更多關注時事新聞。
  • 我的微博熱搜榜壞了,微博遭約談,熱搜榜停更一周!
    是否大家和我一樣,平常看新聞看八卦,第一不是上網找,而是打開微博,在各個榜單裡折騰!作為比較知名的信息傳播平臺,社會上很多即時消息的傳播都是有賴於微博這個平臺。微博的熱搜榜就是在紛雜且龐大的信息裡,挑選出當下最新最火最熱的話題,展現給各位觀眾。就在昨天,我突然發現,我的微博熱搜榜壞了,刷新不出任何消息,後來才知道,微博被有關部門約談了,熱搜榜停更一周,從6月10日15時開始持續到6月17日15時。根據近日消息來看,微博應該是攤上事兒了。
  • 微博熱搜榜切莫淪為「作惡」工具
    1月7日晚,有網友發現在微博熱搜榜上出現了「紫光閣地溝油」一詞。對此,紫光閣官微以幽默的語氣公開回應,「#紫光閣地溝油#上熱搜了?這種負面輿情該怎麼應對?紫寶寶只能躲在樓下食堂紫光閣飯店裡瑟瑟發抖。」微博方面昨日則回應稱,熱搜榜的確存在推廣和廣告,但是要經過審核,而且會有「薦」字樣。
  • 我的微博名字上熱搜榜 是不是真的?
    我的微博名字上熱搜榜 是不是真的?時間:2017-04-01 23:06   來源:系統天堂   責任編輯:毛青青 川北在線核心提示:原標題:我的微博名字上熱搜榜 是不是真的? 我的微博名字上熱搜榜?一覺醒來,到處都被微博熱搜榜給刷屏了,那麼這個是什麼情況?為什麼自己微博名字會出現在熱搜榜上呢!
  • 剛剛,新浪微博熱搜恢復,誰最先登上熱搜榜?
    剛剛,新浪微博熱搜已恢復更新。微博熱搜被暫停!新浪微博被約談:暫停更新微博熱搜榜一周據網信中國6月10日消息,國家網際網路信息辦公室指導北京市網際網路信息辦公室,約談新浪微博負責人,針對微博在蔣某輿論事件中幹擾網上傳播秩序,以及傳播違法違規信息等問題,責令其立即整改,暫停更新微博熱搜榜一周,時間自6月10日15時至6月17日15時,暫停更新熱門話題榜一周,時間自6月10日15時至6月17日15時,嚴肅處理相關責任人,同時,要求北京市網際網路信息辦公室對新浪微博依法從嚴予以罰款的行政處罰
  • 微博熱搜被暫停,我們到底需要一個什麼樣的熱搜榜?
    微博熱搜停更一周】   6月10日,「新浪微博暫停熱搜一周」的消息火爆全網,我想,如果熱搜沒被暫停,可能「熱搜」就能登上自家的熱搜榜了。   至於暫停的原因,想必大家也關注到了,針對此前微博在蔣某輿論事件中,幹擾網上傳播秩序,以及傳播違法違規信息等問題,國家網際網路信息辦公室指導北京市網際網路信息辦公室,約談了新浪微博負責人,責令其立即整改,並暫停更新微博熱搜榜一周
  • 微博熱搜榜花10萬就能進前三?
    對此,微博回應「紫光閣地溝油」並未登上熱搜榜,而是登上了「實時上升熱點」;熱搜榜的確存在推廣和廣告,但是要經過審核,而且會有「薦」字樣,像「紫光閣地溝油」是不可能作為熱詞被購買的。有該歌手粉絲群截圖顯示,其粉絲在看到該微博後策劃了一場「刷熱點」事件,群內有人提到「聯繫了賣熱搜的,明天做一個熱搜出來,大家到時候去刷評論」。7日,「紫光閣地溝油」出現在了「微博熱搜榜」的「實時榜」。
  • 微博曝光熱搜刷榜名單,但你知道上熱搜要多少錢嗎?
    因存在傳播炒作導向錯誤、低俗色情、民族歧視等違法違規有害信息,微博日前被網信部門約談,並於昨日晚間下線了包括熱搜榜、熱門話題榜等在內的一系列板塊。新京報本月 12 日的一篇報導則指出,有微博服務商提供 60 萬元保全天熱搜前十的套餐。有服務商表示,熱搜存留時間與買家提供的熱搜關鍵詞有關,關鍵詞越能引起網友興趣,則熱搜存留時間越長。那麼問題來了, 微博刷熱搜究竟要多少錢?Bianews發現,在豬八戒網,有賣家公然在「微博營銷」產品介紹頁面聲稱可以提供微博話題榜、熱搜榜與紅人大號直發服務。
  • 陳根:微博熱搜變微博熱「餿」,微博到底怎麼了?
    但不難發現,現如今的微博熱搜榜展現的部分內容有的譁眾取寵,庸俗不堪,有的細小瑣碎,完全和明星有關,有的甚至無端貼標籤,傳播虛假或者未經證實的信息。微博熱搜背後,其實是「熱搜生意」大行其道。事實上,2年前,微博就啟動熱搜領域為期一周的下線整改。
  • 快訊|新浪微博被約談,熱搜榜暫停更新
    6月10日,國家網信辦指導北京網信辦,約談新浪微博負責人,針對微博在蔣某輿論事件中幹擾網上傳播秩序,以及傳播違法違規信息等問題,責令其立即整改。整改要求為:暫停更新微博熱搜榜一周,時間自6月10日15時至6月17日15時,暫停更新熱門話題榜一周,時間自6月10日15時至6月17日15時,並嚴肅處理相關責任人。很多人可能會好奇——「蔣某」是誰?「蔣某輿論事件」又是指什麼?
  • 微博熱搜榜回歸!第一波熱搜和你想的一樣嗎?
    微博停止更新熱搜榜的這幾天,不知道有沒有人和小南一樣,簡直像被封印了的山頂洞人,感覺已經和世界失去了聯繫。好不容易熬到第七天,微博熱搜終於恢復了!微博熱搜回來了!你怎麼看? 終於回來了!等得我好苦!無所謂,沒有熱搜挺好的 可以回來,但希望別重現明星「屠榜」! 提交 今天下午3時,微博熱搜剛剛恢復,「熱搜回來了」這個話題不出所料,登上了熱搜熱點話題榜前列!微博吐槽起自己可真是毫不手軟啊~當然,各位頂級流量明星話題熱度不減,這下大家又可以盡情吃瓜了!
  • 網信辦約談處罰新浪微博,微博熱搜變微博熱「餿」
    但不難發現,現如今的微博熱搜榜展現的部分內容有的譁眾取寵,庸俗不堪,有的細小瑣碎,完全和明星有關,有的甚至無端貼標籤,傳播虛假或者未經證實的信息。微博熱搜背後,其實是「熱搜生意」大行其道。事實上,2年前,微博就啟動熱搜領域為期一周的下線整改。
  • ...都想通過微博來做推廣,微博話題榜,微博熱門話題榜,微博熱搜榜
    微博推廣是以微博作為推廣平臺,通過話題討論、微博抽獎、品牌露出等微博活動向廣大網友傳播企業、產品、促銷、活動等信息。   做微博營銷能夠迅速讓品牌口碑爆發,讓產品迅速被感知。
  • 新浪微博再次被約談,2萬就能上熱搜?
    有刷微博習慣的小夥伴可能都注意到了,從昨天下午三點開始,微博熱搜榜就已經停止了更新。截止目前為止,微博的熱搜還是昨天下午那幾條。微博熱搜為什麼突然停止更新了呢?據國家網際網路信息辦公室官微的消息,6月10日,國家網際網路信息辦公室指導北京市網際網路信息辦公室,約談新浪微博負責人,責令其立即整改,暫停更新微博熱搜榜一周,並對相關負責人進行嚴肅處理。
  • 微博熱搜暫停一周,網友手動製作熱搜榜,告訴你這幾天發生的話題
    6月10日,微博熱搜榜停止更新,導致吃瓜群眾這周無瓜可吃,原本熱鬧非凡,有可能登上熱搜的事件,因為熱搜暫停事件而變得無處知曉。網友紛紛感嘆,原來沒有微博熱搜的娛樂圈,這麼安靜,仿佛聽見寂寞在唱歌。按照微博的設定,熱搜榜單是10分鐘更新一次,所以很多新聞會在第一時間被報導出來。因此,刷微博成了網友了解外面世界的重要途徑。可是就在6月10日,國家網際網路信息辦公室指導北京市網際網路信息辦公室,約談新浪微博負責人,針對微博在蔣某輿論事件中加以幹擾,導致輿論錯誤導向的問題,被責令整改,暫停更新微博熱搜榜一周,時間由6月10日15時到17日15時。
  • @復工的明星們:您可以靠這些方法衝上微博熱搜榜
    微博話題熱搜榜終於又回歸到了那個大花、流量、巨星、練習生的角力場。2020年4月23日,一個讓新浪微博攻城獅們和吃瓜群眾難以忘懷的工作日。先是#羅志祥周揚青分手#在上午九點瞬間衝上微博熱搜榜第一;緊接著,#彭昱暢承認戀情#又讓吃瓜路人品到了甜甜的愛情;下午#屈楚蕭否認戀情#、#屈楚蕭 黎梵#等熱搜話題再次拔高了熱搜榜這片瓜田的產量……微博熱搜在24小時內見證了多個大瓜,也豐富了路人們的辦公室談資。
  • 熱搜江湖丨為什麼鄭爽一年能有299天上微博熱搜?
    一年1/3的時間都在微博熱搜上是一種怎樣的體驗? 2016年度熱搜榜顯示,「鄭爽過去一年119次登上微博搜索榜,42次問鼎熱搜榜第一位,創造15億搜索熱度,霸屏138670分鐘。」
  • 熱搜恢復營業 熱搜回來了 第一時間登上熱搜榜
    6月17日下午3:00,停更了7天的微博熱搜終於回來了,微博停更一周資本忙著尋找新的宣傳出口,很多明星短暫放飛自我,部分網友表示願吃素一年換熱搜永遠不來,有些人則表示沒有熱搜自己活得像個山頂洞人。但是無論如何,「微博熱搜」這個網際網路信息傳播中C位中的C位,還是回來了,回來的第一時間還順利把自己送上了熱搜。不得不承認,微博熱搜在年輕人信息獲取中佔有不可替代的位置。
  • 微博下狠手!這些娛樂節目和明星3個月不能上熱搜|熱搜榜下線一周整改
    1月27日,網信辦一紙通文下線了微博熱搜榜,並對微博負責人進行了約談,與此同時下線的還有熱門話題榜、微博問答功能等板塊,時間從1月27日21時至2月3日21時,為期一周。微博為了確保熱搜榜、熱門話題榜的真實可信,不斷對產品本身進行算法升級並設置了以大數據識別為基礎的防刷體系。對於存在作弊特徵的行為,系統都會實時進行識別和攔截。
  • 人民直擊:熱搜榜,民意?生意?
    這部職場劇因聚焦熱搜背後赤裸的真相一炮而紅,《豆瓣》評分一度高達9.2分。我們能通過熱搜榜了解真實的民意嗎?6月10日,新浪微博因在蔣某輿論事件中幹擾網上傳播秩序,以及傳播違法違規信息等問題,被責令整改,暫停更新微博熱搜榜、熱門話題榜一周。