baidu文库爪巴虫——txt

tech2022-08-19  4

首先你应该清楚,直接从文档页面源代码中是找不到文档内容的,

但是我们通过查看浏览器下载的文件,可以很容易的发现文档内容的来源,

为什么说容易呢,引文包含内容的文件通常都是比较大的!只要按文件大小排序,往下找就能发现! 没错就是最大的那个文件,里面妥妥的是汉字 接下来就要分析一下请求的格式了,查看 header 发现 get 参数一大堆 怎么获取这些参数呢?

最先想到的就是在文档页面的源代码中找啦

非常不巧的是,这些参数都能找到!

import requests import re url = 'https://wenku.baidu.com/view/edabfd2ce3bd960590c69ec3d5bbfd0a7956d518.html?fr=search' html = requests.get(url).text res = re.findall(r'"md5sum":"&md5sum=(.*?)&sign=(.*?)"', html) md5, sign = res[0] res = re.findall(r'"show_doc_id":"(.*?)"', html) txtid = res[0] res = re.findall(r'"page":"(.*?)"', html) rn = res[0] res = re.findall(r'"rsign":"(.*?)"', html) rsign = res[0] u = "https://wkretype.bdimg.com/retype/text/{}?md5sum={}&sign={}&callback=cb&pn=1&rn={}&type=txt&rsign={}&_=0".format( txtid, md5, sign, rn, rsign ) print(u) # https://wkretype.bdimg.com/retype/text/edabfd2ce3bd960590c69ec3d5bbfd0a7956d518?md5sum=ef62b71614efa14128d1b234fb9b35e6&sign=6c912310fc&callback=cb&pn=1&rn=15&type=txt&rsign=p_15-r_0-s_20235&_=1599058207247 new_html = requests.get(u).text txt_list = re.findall(r'"c":"(.*?)"', new_html) result = ''.join([item.encode('utf8').decode('unicode_escape','ignore') for item in txt_list]) print(result) ''' 说明: 1、以脂校本为准。【】中是引用的原文;()中是我添加的说明;···是标记年表与文中矛盾之处。 2、为说明引用、表述,我采用了一个红楼纪年坐标,以甄士隐梦中识通灵为坐标起点,作为红楼元年开始纪事。 3、推理的基础是:宝玉在甄士隐梦见僧道那一年出生;钗、菱、袭、晴四人同庚。 4、文中时间顺序本来就有矛盾之处,特别是62回至70,时间线索模糊不清,前后冲突之处甚多,我试了多种排序也不能完全与文字相符,勉强排了下来但明显有错,还请高人指点。 5、尽量把时间的结点都排列出来,所以叫啰嗦版。而且文字也很啰嗦,请忍耐。 ... '''
最新回复(0)