使用requests-html模块爬取百度文库文章(以阿房宫赋为例)

先端上总代码:

注意这段代码可能会报错,因为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)
最后文本文件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kikzm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值