本期為1505035112c2c21ec0963bef3b2c5fb9系列文章上篇內容,跟大家介紹如何使用Python定時爬取知乎熱榜/微博熱搜數據,並儲存至CSV檔案供後續視覺化使用,時序圖部分將在下篇# #內容中介紹,希望對你有幫助。
read_html
— 網頁表格處理
import json import time import requests import schedule import pandas as pd from fake_useragent import UserAgent
##
https://www.zhihu.com/hot
https://api.zhihu.com/topstory/hot-list?limit=10&reverse_order=0
注意:电脑端端直接F12调试页即可看到热榜数据,手机端需要借助抓包工具查看,这里我们使用手机端接口(返回json格式数据,解析比较方便)。
############################################################################
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)
效果:
2.3 保存数据
df.to_csv('zhuhu_hot_datas.csv', mode='a+', index=False, header=csv_header) csv_header = False
3.1 網頁分析
#微博熱搜尋網址:
#https://s.weibo.com/top/summary
資料在網頁的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,效果:
3.3 保存数据
df.to_csv('weibo_hot_datas.csv', mode='a+', index=False, header=csv_header)
结果:
以上是爬蟲+視覺化 | Python知乎熱榜/微博熱搜時序圖(上篇)的詳細內容。更多資訊請關注PHP中文網其他相關文章!