新手上路,请多多指教
最近在掘金上买了一本小册《[Redis 深度历险:核心原理与应用实践]》,只能在掘金的APP上看,不提供PDF文档,没办法,只能自己动手了。花了几个小时看了Python的语法,特此整理已做备忘
分析网络请求的参数
分析网络的请求参数可以借助谷歌的开发者工具,通过开发工具,很容易就定位到文章章节的名字列表接口,通过工具的headers,可以等到这个接口需要的参数
network.png
接下来可以将URL复制出来进行单独请求,这样返回的数据就更加明显了
1533833754758.jpg
从网络请求的分析,可以得到这本小册主要有一个获取章节列表的接口和一个章节明细的接口,从接口也可以看出获取列表接口的参数主要是'uid', 'client_id','token' ,'src' ,' id'这几个参数,而获取章节明细的还需要'sectionId'参数,而这个参数是列表接口返回的,接下来就可以进行写代码了
编码的准备
安装Python环境
这里就不啰嗦了
代码内容
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.parse
import urllib.request
import json
import pdfkit
import time
class crawler():
#获取数据
def requestxiaoce():
#列表接口
url = 'https://xiaoce-cache-api-ms.juejin.im/v1/getListSection'
#列表接口参数
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)
#请求列表数据
response_result = urllib.request.urlopen(url + '?' + data).read()
#将返回数据进行编码
html = response_result.decode('utf-8')
#将返回返回的数据转成方便处理的dict数据
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>'
#迭代请求获取各个章节的明细数据
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失效
#将获取到的数据拼接进行导出
# 使用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()
拓展
根据上面获取到的PDF没有格式,很难阅读,这个时候就需要需要将它格式化便于阅读
从获取到的数据内容,可以这个文档是用md格式的,可以使用Python的markdown工具包进行将其转成html格式的文档,如果要求比较高,还可以给这个文件内容添加各个标签的样式,这里就不展开了
import markdown
....
# hrmlstr为获取到的内容数据
markdown.markdown(htmlstr)
网友评论