python爬取微博熱搜_Python 超簡單爬取微博熱搜榜數據

微博的熱搜榜對于研究大眾的流量有非常大的價值。今天的教程就來說說如何爬取微博的熱搜榜。 熱搜榜的鏈接是:

用瀏覽器瀏覽,發現在不登錄的情況下也可以正常查看,那就簡單多了。使用開發者工具(F12)查看頁面邏輯,并拿到每條熱搜的CSS位置,方法如下:

按照這個方法,拿到這個td標簽的selector是:

pl_top_realtimehot > table > tbody > tr:nth-child(3) > td.td-02 其中nth-child(3)指的是第三個tr標簽,因為這條熱搜是在第三名的位置上,但是我們要爬的是所有熱搜,因此:nth-child(3)可以去掉。還要注意的是 pl_top_realtimehot 是該標簽的id,id前需要加#號,最后變成: #pl_top_realtimehot > table > tbody > tr > td.td-02

你可以自定義你想要爬的信息,這里我需要的信息是:熱搜的鏈接及標題、熱搜的熱度。它們分別對應的CSS選擇器是:

鏈接及標題:#pl_top_realtimehot > table > tbody > tr > td.td-02 > a

熱度:#pl_top_realtimehot > table > tbody > tr > td.td-02 > span

值得注意的是鏈接及標題是在同一個地方,鏈接在a標簽的href屬性里,標題在a的文本中,用beautifulsoup有辦法可以都拿到,請看后文代碼。

現在這些信息的位置我們都知道了,接下來可以開始編寫程序。默認你已經安裝好了python,并能使用cmd的pip,如果沒有的話請見這篇教程:python安裝。需要用到的python的包有:

BeautifulSoup4:

cmd/Terminal 安裝指令:

pip install beautifulsoup4

lxml解析器:

cmd/Terminal 安裝指令:

pip install lxml

lxml是python中的一個包,這個包中包含了將html文本轉成xml對象的工具,可以讓我們定位標簽的位置。而能用來識別xml對象中這些標簽的位置的包就是 Beautifulsoup4.

編寫代碼:

# https://s.weibo.com/top/summary/

import requests

from bs4 import BeautifulSoup

if __name__ == "__main__":

news = []

# 新建數組存放熱搜榜

hot_url = 'https://s.weibo.com/top/summary/'

# 熱搜榜鏈接

r = requests.get(hot_url)

# 向鏈接發送get請求獲得頁面

soup = BeautifulSoup(r.text, 'lxml')

# 解析頁面

urls_titles = soup.select('#pl_top_realtimehot > table > tbody > tr > td.td-02 > a')

hotness = soup.select('#pl_top_realtimehot > table > tbody > tr > td.td-02 > span')

for i in range(len(urls_titles)-1):

hot_news = {}

# 將信息保存到字典中

hot_news['title'] = urls_titles[i+1].get_text()

# get_text()獲得a標簽的文本

hot_news['url'] = "https://s.weibo.com"+urls_titles[i]['href']

# ['href']獲得a標簽的鏈接,并補全前綴

hot_news['hotness'] = hotness[i].get_text()

# 獲得熱度文本

news.append(hot_news)

# 字典追加到數組中

print(news)

代碼說明請看注釋,不過這樣做,我們僅僅是將結果保存到數組中,如下所示,其實不易觀看,我們下面將其保存為csv文件。

Python 熱搜榜爬蟲

import datetime

today = datetime.date.today()

f = open('./熱搜榜-%s.csv'%(today), 'w', encoding='utf-8')

for i in news:

f.write(i['title'] + ',' + i['url'] + ','+ i['hotness'] + 'n')

效果如下,怎么樣,是不是好看很多:

Python 微博熱搜榜爬蟲

完整代碼如下:

# https://s.weibo.com/top/summary/

import requests

from bs4 import BeautifulSoup

if __name__ == "__main__":

news = []

# 新建數組存放熱搜榜

hot_url = 'https://s.weibo.com/top/summary/'

# 熱搜榜鏈接

r = requests.get(hot_url)

# 向鏈接發送get請求獲得頁面

soup = BeautifulSoup(r.text, 'lxml')

# 解析頁面

urls_titles = soup.select('#pl_top_realtimehot > table > tbody > tr > td.td-02 > a')

hotness = soup.select('#pl_top_realtimehot > table > tbody > tr > td.td-02 > span')

for i in range(len(urls_titles)-1):

hot_news = {}

# 將信息保存到字典中

hot_news['title'] = urls_titles[i+1].get_text()

# get_text()獲得a標簽的文本

hot_news['url'] = "https://s.weibo.com"+urls_titles[i]['href']

# ['href']獲得a標簽的鏈接,并補全前綴

hot_news['hotness'] = hotness[i].get_text()

# 獲得熱度文本

news.append(hot_news)

# 字典追加到數組中

print(news)

import datetime

today = datetime.date.today()

f = open('./熱搜榜-%s.csv'%(today), 'w', encoding='utf-8')

for i in news:

f.write(i['title'] + ',' + i['url'] + ','+ i['hotness'] + 'n')

?Python實用寶典 (pythondict.com)

不只是一個寶典

歡迎關注公眾號:Python實用寶典

原文來自Python實用寶典:Python 微博熱搜

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271178.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271178.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271178.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode14 Longest Common Prefix

題意: Write a function to find the longest common prefix string amongst an array of strings. (Easy) 這兩天實驗室項目太忙了, 老板各種活,只能挑著先水幾道easy題,這兩個題是昨天做的沒來得及寫總結。 分析: 暴…

類加載器ClassLoader的角色

類加載器ClassLoader的角色

軟件項目管理:進度管理相關概念介紹

軟件項目管理當中,項目進度的合理安排是如期完成軟件項目的重要基礎,也是合理分配資源的重要依據。項目進度安排是項目管理工作當中非常重要的組成部分。軟件開發項目進度安排的方式:1、系統最終交付日期已經確定,軟件開發部門必須…

ios開發 多人語音聊天_手游語音市場的現狀、機遇與挑戰

文/手游那點事小魚原創2014年持續火熱的手游市場成就了一大批企業的上市夢,同時也在大環境下產生了對系列手游增值服務的需求。基于玩家對手游社交性的需求,以及借鑒傳統端游,頁游中成功的社交體系,手游市場逐步出現了對手游語音的…

linux 下運行 tomcat

一開始找不到表名,原來mysql 表名區分大小寫。 修改參數 lower_case_table_names1 成功運行后不能通過瀏覽器訪問! 開啟8080端口 一、關閉防火墻 firewall-cmd --state 查看狀態 [rootVM_7_88_centos /]# firewall-cmd --state running [rootVM_7_88…

軟件項目管理:軟件工具與開發環境相關知識介紹

1、軟件工具相關名詞概念軟件工具:用來輔助軟件開發、運行、維護、管理等過程中的活動軟件。軟件開發環境:是指支持軟件產品開發的軟件系統,它由軟件工具集和環境集成機制構成。軟件工具集:包括支持軟件開發相關過程、活動、任務的…

apollo java客戶端_攜程配置中心Apollo的Java客戶端API的使用

一、SpringBoot集成1.發布配置信息設置本機為DEV環境:Linux在/opt/settings/server.properties增加配置envDEV,windows在c:\opt\settings\server.properties圖1 在apollo portal上新建項目后,默認就有了application命名空間。在DEV環境下新建…

JNI----Native本地方法接口

Native本地方法接口 JNI:Java Native Interface 本地接口的作用是融合不同的編程語言為Java所用,它的初衷是融合C/C程序 native:凡是帶native關鍵字的,說明java的作用范圍達不到了,會去調用底層c語言的庫&#xff01…

python的flag是什么意思_網上老說的flag是什么意思

近些年,國內的網絡發展速度還是很快的,大家可以通過網絡了解很多的東西,因此網絡上也有很多熱詞開始流行起來,其中flag算是十分流行的一個詞匯,網上老說的flag是什么意思?立個flag是什么梗?可能還有一些朋友并不是很…

項目管理基礎:系統分析相關概念介紹

1、系統分析的主要任務系統分析主要任務是對現行的系統進一步詳細調查,將調查得到的資料集中,對組織內部整體管理狀況和信息處理過程進行分析,為系統開發提供所需要的資料,并提交系統方案說明書。2、系統分析的主要階段系統分析主…

java線程池和線程實例化_淺談Java 線程池原理及使用方式

一、簡介什么是線程池?池的概念大家也許都有所聽聞,池就是相當于一個容器,里面有許許多多的東西你可以即拿即用。java中有線程池、連接池等等。線程池就是在系統啟動或者實例化池時創建一些空閑的線程,等待工作調度,執…

線性代數及其應用_線性代數入門——行列式的簡單應用選講

系列簡介:這個系列文章講解線性代數的基礎內容,注重學習方法的培養。線性代數課程的一個重要特點(也是難點)是概念眾多,而且各概念間有著千絲萬縷的聯系,對于初學者不易理解的問題我們會不惜筆墨加以解釋。在內容上,以…

RocketMQ 使用及常見問題

前言 本文檔是針對RocketMQ使用及常見問題的說明。 一.獲取項目、安裝包及文檔 1. alibaba/RocketMQ https://github.com/alibaba/RocketMQ 2. Download the latest release package https://github.com/alibaba/RocketMQ/releases 3.…

系統開發基礎:UML相關知識筆記

1、UML概念統一建模語言(Unified Modeling Language UML)是面向對象軟件的標準建模語言。由于簡單、統一,又能夠表達軟件設計中的動態和靜態信息。目前UML已經成為可視化建模語言的工業標準。2、UML的組成UML三要素:構造塊、規則、…

java中什么是運行異常_在java中最常用的運行時異常是什么?

我從不會拋出NullPointerException。對我來說,它是一個出現在代碼中當出現問題時,需要開發人員看看會發生什么。然后(s)他固定的原因,它不會再次發生。我使用IllegalStateException表示對象配置不正確或調用的順序不正確。但是,我…

迭代器 java_面試必備(含答案):30 個 Java 高頻面試問題

Java集合框架為Java編程語言的基礎,也是Java面試中很重要的一個知識點。這里,我列出了一些關于Java集合的重要問題和答案。1.Java集合框架是什么?說出一些集合框架的優點?每種編程語言中都有集合,最初的Java版本包含幾…

硬件基礎:臺式電腦上的常用的幾個接口!

今天給大家詳細講解臺式電腦上的常用的幾個接口!1、I/O接口部分下圖所有的接口,也是我們機箱后面的接口,統稱為:I/O接口。2、鍵鼠PS/2PS/2接口是I/O接口中比較常見的一種接口,用來連接鍵盤和鼠標,二者可以用…

CSS-DOM介紹

三位一體的網頁: 我們在瀏覽器里看到的網頁其實是由以下三層信息構成的一個共同體: 1、結構層: 結構層是由HTML和XHTML之類的標記語言所構成的。所就是哪些出現在html標簽里面的單詞,對網頁內容的語義含義作出了如下描述&#xff0c;例如&#xff0c;<p>This is a paragr…