爬取今日熱榜微博的前十名熱點信息數據


 

 打開今日熱榜網站,鼠標右鍵並查看網頁源代碼,是html結構,找到熱搜榜第一條標題所在的位置。

找到對應標簽span,發現class=‘t'是標題,class=’e'是熱度,此時爬取目標已經很明確了,

通過find_all()函數查找所有對應內容,最后再用.string方法將找到的內容轉化為字符串形式打印出來。

整體代碼如下:

 1 import requests
 2 from bs4 import BeautifulSoup
 3 import pandas as pd
 4 from pandas import DataFrame
 5 
 6 #定義一個獲取html文本的函數
 7 def getHTMLText(url):
 8     try:
 9         #為確保成功訪問網站,將爬蟲偽裝成瀏覽器
10         headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
11         r = requests.get(url,timeout = 30,headers=headers)
12         r.raise_for_status()
13         #更改為utf-8編碼以確保不會亂碼
14         r.encoding = 'utf-8'
15         return r.text
16     except:
17         return ""
18 
19 #定義一個獲取並打印爬取數據的函數
20 def printWeiboHot(lst,html,num):
21     #煲湯
22     soup = BeautifulSoup(html, 'html.parser')
23     #查找需要爬取的數據,並將其存放於兩個列表里
24     lst1 = soup.find_all('span', class_='t')
25     lst2 = soup.find_all('span', class_='e')
26     #主標題
27     print('{:^55}'.format('微博熱搜榜'))
28     #列名
29     print('{:^5}\t{:^40}\t{:^10}'.format('排名', '標題', '熱度'))
30     #通過循環把爬取的數據一行一行打印出來
31     for i in range(num):
32         print('{:^5}\t{:^30}\t{:^10}'.format(i+1, lst1[i].string, lst2[i].string))
33         #將爬取的數據整合到一個列表里,以便輸出
34         lst.append([i+1,lst1[i].string,lst2[i].string])
35 
36 #主函數
37 def main():
38     num = 10
39     lst = []
40     url = 'https://tophub.today/'
41     html = getHTMLText(url)
42     printWeiboHot(lst,html,num)
43     #創建一個DataFrame存放爬取的數據並將其用excel保存
44     df = pd.DataFrame(lst,columns=['排名','標題','熱度'])
45     WeiboHot = r'C:\Users\Yaoner\WeiboHot.xlsx'
46     df.to_excel(WeiboHot)
47     
48 main()

輸出到Excel的結果如下:

 


免責聲明!

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



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