先端上总代码:
注意这段代码可能会报错,因为url貌似每天都会改,得手动获得
import json
from requests_html import HTMLSession
from requests_html import UserAgent
url = 'https://wkrtcs.bdimg.com/rtcs/getbdjson?bucketNum=70&pn=1&rn=5&range=75931-23808_23809-44453_44454-62310_62311-75930_75931-&rsign=p_5-r_0-s_c26ca&dataType=rtcs&md5sum=57c4668f9fad97f2d69c795041aebcd3&sign=48bd4fc2ea&rtcs_flag=1&rtcs_ver=4.1&callback=sf_edu_wenku_rtcs_doc_jsonp_1_5&_=1700606857484'
headers = {'User-Agent': ua}
response = s.get(url=url, headers=headers).text
count = 0
while True:
if response[count] == '{':
break
count+=1
response = response[count:-1:1]
js = json.loads(response)
js = js["document.xml"]
ans = ''
for i in js[0:len(js)]:
for j in i['c']:
for k in j['c']:
ans += k['c']
ans += '\n'
with open('阿房宫赋.txt','w') as f:
f.write(ans)
一、简单准备
import json
from requests_html import HTMLSession
from requests_html import UserAgent
s = HTMLSession()
ua = UserAgent().random
url=''#这里填入一会获取的url
headers = {'User-Agent': ua}
response = s.get(url=url, headers=headers).text
这里response用来存放未处理的文档。
二、获得url
1.在网页随便一处空白处右击,选“检查”或“审查元素”选项。
2.之后在打开的窗口选择Network,’“网络”选项,刷新页面。
3.按照文件大小排序。(猜测文档中文字较多)
4.从大到小依次查看文件预览,看到长得像json的多看几眼
5.我已经找到了该文件,如图:
6. 获得该文件的url链接,点击“标头” -> 复制“请求url” -> 粘贴到python代码中
三、处理文件
get请求得到的string要经过处理才能变成需要的文档,处理步骤如下:
1.print输出一下response,可以发现response是一个包含json的javascript脚本,要用切片的方式先获取到json。用while循环获取第一个'{'位置。
输出response的结果(略):
sf_edu_wenku_rtcs_doc_jsonp_1_5({"during":0.025395519,"picConv":false,....})
count = 0
while True:
if response[count] == '{':
break
count+=1
response = response[count:-1:1]
2.用json库的loads函数得到一个能处理的json文件,js=json.loads(response)。
3.js的结构如下,找到所有文字所在的地址就能获得完整的文档了。
例如:js["document.xml"][0]['c'][0]['c'][0]['c']就是"《"符号
当js["document.xml"][0]['c'][0]['c'][0]['c']+js["document.xml"][0]['c'][0]['c'][1]['c']+js["document.xml"][0]['c'][0]['c'][2]['c']就是一行,即为“《阿房宫赋》(唐)杜牧”。
4.最后用三重循环获取整个文档:
js = js["document.xml"]
ans = ''
for i in js[0:len(js)]:
for j in i['c']:
for k in j['c']:
ans += k['c']
ans += '\n'
五、存储文档
新建并写入一个名为“阿房宫赋.txt”的文本文件
with open('阿房宫赋.txt','w') as f:
f.write(ans)