人人都可以掌握的实用数据分析。内容涵盖:网络爬虫,数据分析,数据可视化,数据保存到 csv 和 excel 文件,以及命令行传参。麻雀虽小,五脏俱全。
1. 准备工作
1.1 用到技术
- python3
- requests: http 爬取 json 数据
- pandas: 分析,保存数据
- matplotlib: 数据可视化分析
1.2 安装
如已安装,请跳过。
pip install requests
pip install pandas
pip install matplotlib
1.3 导入
import requests
import pandas as pd
import matplotlib.pyplot as plt
# %matplotlib inline
2. URL分析
2.1 复制 json 接口请求 URL
进入掘金个人主页,打开开发者工具,点击“专栏” tab ,在开发者工具"Network->XHR->Name->get_entry_by_self->Headers->Request URL" 复制 url。
例如我的是:‘https://timeline-merger-ms.juejin.im/v1/get_entry_by_self?src=web&uid=5bd2b8b25188252a784d19d7&device_id=1567748420039&token=eyJhY2Nlc3NfdG9rZWJTTHVPcVRGQ1BseWdTZHF4IiwicmVmcmVzaF90b2tlbiI6ImJHZkJDVDlWQkZiQUNMdTYiLCJ0b2tlbl90eXBlIjoibWFjIiwiZXhwaXJlX2luIjoyNTkyMDAwfQ%3D%3D&targetUid=5bd2b8b25188252a784d19d7&type=post&limit=20&order=createdAt’
如果,你已经迫不及待想要看到效果,可以在复制这个 url 后,直接跳到本文 第 6 节。
不管怎样,还是建议花点时间看完整篇文章,了解足够多细节,以便灵活运用本文提供的方法。
2.2 分析 URL
将上面复制的 url 赋值给下方代码中 juejin_zhuanlan_api_full_url
变量。
juejin_zhuanlan_api_full_url = 'https://timeline-merger-ms.juejin.im/v1/get_entry_by_self?src=web&uid=5bd2b8b25188252a784d19d7&device_id=1567748420039&token=eyJhY2Nlc3NfdG9rZW4iOiJTTcVRGQ1BseWdTZHF4IiwicmVmcmVzaF90b2tlbiI6ImJHZkJDVDlWQkZiQUNMdTYiLCJ0b2tlbl90eXBlIjoibWFjIiwiZXhwaXJlX2luIjoyNTkyMDAwfQ%3D%3D&targetUid=5bd2b8b25188252a784d19d7&type=post&limit=20&order=createdAt'
def decode_url(url):
adr, query = url.split("?")
params = {
kv.split("=")[0]:kv.split("=")[1] for kv in query.split("&")}
return adr, params
decode_url(juejin_zhuanlan_api_full_url)
输出:
('https://timeline-merger-ms.juejin.im/v1/get_entry_by_self',
{'src': 'web',
'uid': '5bd2b8b25188252a784d19d7',
'device_id': '156774842039',
'token': 'eyJhY2Nlc3NfdG9rZW4iOiJTTHVPcVRGeWdTZHF4IiwicmVmcmVzaF90b2tlbiI6ImJHZkJDVDlWQkZiQUNMdTYiLCJ0b2tlbl90eXBlIjoibWFjIiwiZXhwaXJlX2luIjoyNTkyMDAwfQ%3D%3D',
'targetUid': '5bd2b8b25188252a784d19d7',
'type': 'post',
'limit': '20',
'order': 'createdAt'})
3. 抓取数据
助手函数:
def encode_url(url, params):
query = "&".join(["{}={}".format(k, v) for k, v in params.items()])
return "{}?{}".format(url, query)
def get_juejin_url(uid, device_id, token):
url = "https://timeline-merger-ms.juejin.im/v1/get_entry_by_self"
params = {
'src': 'web',
'uid': uid,
'device_id': device_id,
'token': token,
'targetUid': uid,
'type': 'post',
'limit': 20,
'order': 'createdAt'}
return encode_url(url, params)
requests 抓取数据:
uid='5bd2b8b25188252a784d19d7'
device_id