ホームページ > バックエンド開発 > Python チュートリアル > クローラー + 視覚化 | Python Zhihu ホットリスト/Weibo ホット検索シーケンス チャート (パート 1)

クローラー + 視覚化 | Python Zhihu ホットリスト/Weibo ホット検索シーケンス チャート (パート 1)

リリース: 2023-08-10 15:53:10
転載
978 人が閲覧しました


この問題は<Zhihuホットリスト/Weiboホット検索シーケンスチャート>一連の記事前回の記事の内容 Python を使用してナレッジ Hu ホット リストを定期的にクロールする方法を紹介します/Weibo ホット検索データを取得し、その後の視覚化のために CSV ファイルに保存します。タイミング ダイアグラムの部分は #次の記事 #コンテンツで紹介されたそれがあなたに役立つことを願っています。

涉及到的内容:
pandas — 数据处理
schedule — 定时任务
#json - データ形式

read_html — Web フォーム処理


#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 Zhihu ホットリスト/Weibo ホット検索シーケンス チャート (パート 1)

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)[&#39;data&#39;]
    allinfo = []
    time_mow = time.strftime("%Y-%m-%d %H:%M", time.localtime())
    print(time_mow)
    for indx,item in enumerate(datas):
        title = item[&#39;target&#39;][&#39;title&#39;]
        heat = item[&#39;detail_text&#39;].split(&#39; &#39;)[0]
        answer_count = item[&#39;target&#39;][&#39;answer_count&#39;]
        follower_count = item[&#39;target&#39;][&#39;follower_count&#39;]
        href = item[&#39;target&#39;][&#39;url&#39;]
        info = [time_mow, indx+1, title, heat, answer_count, follower_count, href]
        allinfo.append(info)
    # 仅首次加表头
    global csv_header
    df = pd.DataFrame(allinfo,columns=[&#39;时间&#39;,&#39;排名&#39;,&#39;标题&#39;,&#39;热度(万)&#39;,&#39;回答数&#39;,&#39;关注数&#39;,&#39;链接&#39;])
    print(df.head())
ログイン後にコピー

定时间隔设置1S:

# 每1分钟执行一次爬取任务:
schedule.every(1).minutes.do(getzhihudata,zhihu_url,headers)
while True:
     schedule.run_pending()
     time.sleep(1)
ログイン後にコピー

效果:

クローラー + 視覚化 | Python Zhihu ホットリスト/Weibo ホット検索シーケンス チャート (パート 1)

2.3 保存数据

df.to_csv(&#39;zhuhu_hot_datas.csv&#39;, mode=&#39;a+&#39;, index=False, header=csv_header)
csv_header = False
ログイン後にコピー
注意csv_header的设置,涉及到是否写入表头字段。


3. Weibo ホット検索データ

##3.1 Web ページ分析

##Weibo ホット検索 URL:

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

クローラー + 視覚化 | Python Zhihu ホットリスト/Weibo ホット検索シーケンス チャート (パート 1)
F12 Web ページのソース コードを表示:
クローラー + 視覚化 | Python Zhihu ホットリスト/Weibo ホット検索シーケンス チャート (パート 1)

##データは、Web ページの

タグ にあります。

##3.2 データの取得 #

代码:

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

定时间隔设置1S效果:

クローラー + 視覚化 | Python Zhihu ホットリスト/Weibo ホット検索シーケンス チャート (パート 1)

3.3 保存数据

df.to_csv(&#39;weibo_hot_datas.csv&#39;, mode=&#39;a+&#39;, index=False, header=csv_header)
ログイン後にコピー

结果:

クローラー + 視覚化 | Python Zhihu ホットリスト/Weibo ホット検索シーケンス チャート (パート 1)


以上がクローラー + 視覚化 | Python Zhihu ホットリスト/Weibo ホット検索シーケンス チャート (パート 1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:Python当打之年
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート