首頁 >後端開發 >Python教學 >爬蟲+視覺化 | Python知乎熱榜/微博熱搜時序圖(上篇)

爬蟲+視覺化 | Python知乎熱榜/微博熱搜時序圖(上篇)

Python当打之年
Python当打之年轉載
2023-08-10 15:53:101017瀏覽


本期為1505035112c2c21ec0963bef3b2c5fb9系列文章上篇內容,跟大家介紹如何使用Python定時爬取知乎熱榜/微博熱搜數據,並儲存至CSV檔案供後續視覺化使用,時序圖部分將在下篇# #內容中介紹,希望對你有幫助。

涉及到的内容:
pandas — 数据处理
schedule — 定时任务
#json — 資料格式

read_html
 — 網頁表格處理

###### ###########################
1. 準備工作

1.1 匯入模組 
#
import json
import time
import requests
import schedule
import pandas as pd
from fake_useragent import UserAgent


##

2. 知乎热榜数据

2.1 网页分析 
知乎热榜电脑端接口:
https://www.zhihu.com/hot
知乎热榜手机端接口:
https://api.zhihu.com/topstory/hot-list?limit=10&reverse_order=0

注意:电脑端端直接F12调试页即可看到热榜数据,手机端需要借助抓包工具查看,这里我们使用手机端接口(返回json格式数据,解析比较方便)。

爬蟲+視覺化 | Python知乎熱榜/微博熱搜時序圖(上篇)

2.2 取得資料 

############################################################################
def getzhihudata(url, headers):
    r = requests.get(url, headers=headers)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    datas = json.loads(r.text)['data']
    allinfo = []
    time_mow = time.strftime("%Y-%m-%d %H:%M", time.localtime())
    print(time_mow)
    for indx,item in enumerate(datas):
        title = item['target']['title']
        heat = item['detail_text'].split(' ')[0]
        answer_count = item['target']['answer_count']
        follower_count = item['target']['follower_count']
        href = item['target']['url']
        info = [time_mow, indx+1, title, heat, answer_count, follower_count, href]
        allinfo.append(info)
    # 仅首次加表头
    global csv_header
    df = pd.DataFrame(allinfo,columns=['时间','排名','标题','热度(万)','回答数','关注数','链接'])
    print(df.head())

定时间隔设置1S:

# 每1分钟执行一次爬取任务:
schedule.every(1).minutes.do(getzhihudata,zhihu_url,headers)
while True:
     schedule.run_pending()
     time.sleep(1)

效果:

爬蟲+視覺化 | Python知乎熱榜/微博熱搜時序圖(上篇)

2.3 保存数据 

df.to_csv('zhuhu_hot_datas.csv', mode='a+', index=False, header=csv_header)
csv_header = False
注意csv_header的设置,涉及到是否写入表头字段。


3. 微博熱搜資料

3.1 網頁分析 

#微博熱搜尋網址:

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

爬蟲+視覺化 | Python知乎熱榜/微博熱搜時序圖(上篇)
F12查看網頁原始碼:
爬蟲+視覺化 | Python知乎熱榜/微博熱搜時序圖(上篇)

資料在網頁的f5d188ed2c074f8b944552db028f98a1標籤裡

3.2 取得資料 
##

代码:

def getweibodata():
    url = 'https://s.weibo.com/top/summary'
    r = requests.get(url, timeout=10)
    r.encoding = r.apparent_encoding
    df = pd.read_html(r.text)[0]
    df = df.loc[1:,['序号', '关键词']]
    df = df[~df['序号'].isin(['•'])]
    time_mow = time.strftime("%Y-%m-%d %H:%M", time.localtime())
    print(time_mow)
    df['时间'] = [time_mow] * df.shape[0]
    df['排名'] = df['序号'].apply(int)
    df['标题'] = df['关键词'].str.split(' ', expand=True)[0]
    df['热度'] = df['关键词'].str.split(' ', expand=True)[1]
    df = df[['时间','排名','标题','热度']]
    print(df.head())

定时间隔设置1S效果:

爬蟲+視覺化 | Python知乎熱榜/微博熱搜時序圖(上篇)

3.3 保存数据 

df.to_csv('weibo_hot_datas.csv', mode='a+', index=False, header=csv_header)

结果:

爬蟲+視覺化 | Python知乎熱榜/微博熱搜時序圖(上篇)


以上是爬蟲+視覺化 | Python知乎熱榜/微博熱搜時序圖(上篇)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:Python当打之年。如有侵權,請聯絡admin@php.cn刪除