新手上路蹦浦,請多多指教
最近在掘金上買了一本小冊《[Redis 深度歷險:核心原理與應用實踐]》扭吁,只能在掘金的APP上看,不提供PDF文檔盲镶,沒辦法智末,只能自己動手了⊥胶樱花了幾個小時看了Python的語法,特此整理已做備忘
分析網(wǎng)絡請求的參數(shù)
分析網(wǎng)絡的請求參數(shù)可以借助谷歌的開發(fā)者工具,通過開發(fā)工具送漠,很容易就定位到文章章節(jié)的名字列表接口顽照,通過工具的headers,可以等到這個接口需要的參數(shù)
network.png
接下來可以將URL復制出來進行單獨請求闽寡,這樣返回的數(shù)據(jù)就更加明顯了
1533833754758.jpg
從網(wǎng)絡請求的分析代兵,可以得到這本小冊主要有一個獲取章節(jié)列表的接口和一個章節(jié)明細的接口,從接口也可以看出獲取列表接口的參數(shù)主要是'uid'爷狈, 'client_id'植影,'token' ,'src' ,' id'這幾個參數(shù)涎永,而獲取章節(jié)明細的還需要'sectionId'參數(shù)思币,而這個參數(shù)是列表接口返回的鹿响,接下來就可以進行寫代碼了
編碼的準備
安裝Python環(huán)境
這里就不啰嗦了
代碼內容
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.parse
import urllib.request
import json
import pdfkit
import time
class crawler():
#獲取數(shù)據(jù)
def requestxiaoce():
#列表接口
url = 'https://xiaoce-cache-api-ms.juejin.im/v1/getListSection'
#列表接口參數(shù)
value= {
'uid':'****',
'client_id':'***',
'token' :'****',
'src' : '***',
' id': '***'
}
#用戶代理,模擬瀏覽器請求
user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'
headers = {'User-Agent': user_agent}
data = urllib.parse.urlencode(value)
#請求列表數(shù)據(jù)
response_result = urllib.request.urlopen(url + '?' + data).read()
#將返回數(shù)據(jù)進行編碼
html = response_result.decode('utf-8')
#將返回返回的數(shù)據(jù)轉成方便處理的dict數(shù)據(jù)
htmlstr = json.loads(html)
# 從上面的接口分析谷饿,可是看出請求明細接口的sectionId存放你在json 的key為d的value下
titlelist = htmlstr.get('d')
#明細接口的請求地址
url = 'https://xiaoce-cache-api-ms.juejin.im/v1/getSection'
content = '<head><meta charset="UTF-8"> </head>'
#迭代請求獲取各個章節(jié)的明細數(shù)據(jù)
for i in titlelist:
value['sectionId'] = i.get('_id')
data = urllib.parse.urlencode(value)
response_result = urllib.request.urlopen(url + '?' + data).read()
html = response_result.decode('utf-8')
htmlstr = json.loads(html).get('d')['content']
content = content + htmlstr
time.sleep(1) #休眠一秒惶我,避免過頻訪問導致token失效
#將獲取到的數(shù)據(jù)拼接進行導出
# 使用pdfkit需要主要在機器上安裝wkhtmltopdf軟件
#'/opt/bin/wkhtmltopdf'為軟件安裝的目錄
# 可以通過命令'which wkhtmltopdf'獲取軟件路徑
config = pdfkit.configuration(wkhtmltopdf='/opt/bin/wkhtmltopdf')
pdfkit.from_string(content, '/Users/xushaoxin/Desktop/Redis 深度歷險:核心原理與應用實踐.pdf',configuration =config)
return content
crawler.requestxiaoce()
拓展
根據(jù)上面獲取到的PDF沒有格式,很難閱讀博投,這個時候就需要需要將它格式化便于閱讀
從獲取到的數(shù)據(jù)內容绸贡,可以這個文檔是用md格式的,可以使用Python的markdown工具包進行將其轉成html格式的文檔毅哗,如果要求比較高听怕,還可以給這個文件內容添加各個標簽的樣式,這里就不展開了
import markdown
....
# hrmlstr為獲取到的內容數(shù)據(jù)
markdown.markdown(htmlstr)
效果
1533882478180.jpg