python 自動(dòng)爬取文章數(shù)據(jù)

https://www.runoob.com/w3cnote/python-pip-install-usage.html
pip相關(guān)網(wǎng)站

1.準(zhǔn)備工作
1.1 用到技術(shù)

python3
requests: http 爬取 json 數(shù)據(jù)

1.2 安裝
pip install requests

1.3 導(dǎo)入
import requests
2. URL分析
2.1 復(fù)制 json 接口請(qǐng)求 URL

進(jìn)入掘金個(gè)人主頁(yè),打開開發(fā)者工具,點(diǎn)擊“專欄” tab ,在開發(fā)者工具"Network->XHR->Name->get_entry_by_self->Headers->Request URL" 復(fù)制 url。


將上面復(fù)制的 url 賦值給下方代碼中 juejin_youliang_api_full_url 變量。

import requests

juejin_youliang_api_full_url = 'https://timeline-merger-ms.juejin.im/v1/get_entry_by_self?src=web&uid=59bf12c05188256c6d77d0db&device_id=1568894045269&token=eyJhY2Nlc3NfdG9rZW4iOiJ2cVFna25YNU9oM2VFSVM4IiwicmVmcmVzaF90b2tlbiI6ImlwYXJUazFzUGJyNlZVQUgiLCJ0b2tlbl90eXBlIjoibWFjIiwiZXhwaXJlX2luIjoyNTkyMDAwfQ%3D%3D&targetUid=59bf12c05188256c6d77d0db&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_youliang_api_full_url)
print (decode_url(juejin_youliang_api_full_url))

輸出:

('https://timeline-merger-ms.juejin.im/v1/get_entry_by_self',
 {'src': 'web', 
'uid': '59bf12c05188256c6d77d0db',
 'device_id': '1568894045269', 
'token': 'eyJhY2Nlc3NfdG9rZW4iOiJ2cVFna25YNU9oM2VFSVM4IiwicmVmcmVzaF90b2tlbiI6ImlwYXJUazFzUGJyNlZVQUgiLCJ0b2tlbl90eXBlIjoibWFjIiwiZXhwaXJlX2luIjoyNTkyMDAwfQ%3D%3D', 
'targetUid': '59bf12c05188256c6d77d0db',
 'type': 'post', 
'limit': '20',
 'order': 'createdAt'
})
3. 抓取數(shù)據(jù)

助手函數(shù):

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 抓取數(shù)據(jù):

uid='59bf12c05188256c6d77d0db'
device_id='1568894045269'
token='eyJhY2Nlc3NfdG9rZW4iOiJ2cVFna25YNU9oM2VFSVM4IiwicmVmcmVzaF90b2tlbiI6ImlwYXJUazFzUGJyNlZVQUgiLCJ0b2tlbl90eXBlIjoibWFjIiwiZXhwaXJlX2luIjoyNTkyMDAwfQ%3D%3D'

url = get_juejin_url(uid, device_id, token)

headers = {
  'Origin': 'https://juejin.im',
  'Referer': 'https://juejin.im/user/5bd2b8b25188252a784d19d7/posts',
  'Sec-Fetch-Mode': 'cors',
  'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36'
}

res = requests.get(url, headers=headers)

if res.status_code == 200:
    json_data = res.json()
    print('獲取數(shù)據(jù)陳成功')
    print(json_data)
else:
    print('數(shù)據(jù)獲取失敗,請(qǐng)檢查token是否失效')
4. 分析數(shù)據(jù)
4.1 分析 json 數(shù)據(jù) 找到文章列表字段

輸出:

json_data = res.json()
    
    for k, v in json_data.items():
        print(k, ':', v)
t --host localhost --port 57248 /Users/qiuchendichen/Desktop/python腳本/demo.py 
s : 1
m : ok
d : {'total': 2, 'entrylist': [{'collectionCount': 0, 'userRankIndex': 0, 'buildTime': 1568894959.9655, 'commentsCount': 0 .... .... .... 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??2005 年,Jesse James Garrett 發(fā)表了一篇在線文章,題為“Ajax: A new App...
    霜天曉閱讀 943評(píng)論 0 1
  • 安靜的坐下來(lái)讀一本書,還有此時(shí)安靜的我。 生活有時(shí)就像一本書,你要安靜的閱讀,細(xì)細(xì)的品味,才能悟出其中的滋味。遇到...
    茶葉蛋的Cha閱讀 255評(píng)論 0 0
  • 時(shí)隔兩個(gè)月,又回沈陽(yáng),地鐵里都是東北口音,地鐵口一排黑車在拉客,校外小攤熱熱鬧鬧,看見了愛吃的大連燜子,QQ雞架,...
    嘿你很棒閱讀 424評(píng)論 0 2
  • 因越來(lái)越喜歡互加的培訓(xùn)課程,客串了互聯(lián)網(wǎng)教育課程改革專題班第五課《夜空中有顆最亮的星》,在絲絲老師的引領(lǐng)下...
    雙陽(yáng)338趙雅麗閱讀 1,176評(píng)論 14 23

友情鏈接更多精彩內(nèi)容