【工具】js指令碼下載百度文庫生成word文字 + python爬取百度文庫

js指令碼

在開發人員工具中複製貼上按回車鍵即可

//1.獲取文字
let topDiff = -1;
let content = "";
var filename= document.getElementsByClassName('doc-title')[0].innerText;

const target = document.querySelectorAll(".reader-word-layer"); 
target.forEach(x => {
    if (x.style.top !== topDiff) {
        content += "\n";
        topDiff = x.style.top;
    };
    content += x.innerText;
}); 

//2.建立下載連結,下載到本地
var element = document.createElement('a');
 element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(content));
 element.setAttribute('download', filename+".doc");
 
 element.style.display = ".reader-word-layer";
 document.body.appendChild(element);
 
 element.click();
 
 document.body.removeChild(element);

是之前記錄的,原文是其他文章,不記得是哪個了

python爬取

import os
import re
import json
import requests
from urllib.request import urlretrieve


class BaiduWk:
    def __init__(self):
        self.list_info = []
        self.session = requests.session()
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 \
            (KHTML, like Gecko) Chrome/80.0.3987.87 Mobile Safari/537.36'}

    # 獲取網頁原始碼的資料
    def get_html(self, start_url):
        response = self.session.get(start_url, headers=self.headers)
        response.encoding = response.apparent_encoding
        return response.text

    # 獲取文件標題, 提取請求引數
    def parse_html(self, data):     
        re_title = re.findall("'title': '(.*?)',", data)
        title = re_title[0] if re_title else re.findall('<title>(.*?)</title>', data)[0]
        params = {
            'bucketNum': re.findall(r'"bucketNum":(\d+)', data)[0],
            'md5sum': re.findall('md5sum=(.*?)&', data)[0],
            'sign': re.findall('sign=(.*?)&', data)[0],
            'rtcs_flag': re.findall('rtcs_flag=(.*?)&', data)[0],
            'rtcs_ver': re.findall('rtcs_ver=(.*?)&', data)[0],
            'rsign': re.findall('"rsign":"(.*?)"', data)[0], }
        # 提取頁碼列表
        page_range = re.findall(r'{"page":\d+,"range":"(.*?)"}', data)
        return params, page_range, title
	
	# 以頁碼列表依次迭代
    def words_data(self, params, page_range):
        pages = len(page_range) + 1
        url = r'https://wkrtcs.bdimg.com/rtcs/webapp'
        for i in range(1, pages):
            print(f'正在解析第{i}頁資料,飛速讀取中...')
            # 新增所需的頁碼資訊
            params['pn'] = i
            params['range'] = page_range[i - 1]
            response = self.session.get(url, params=params).text
            yield response

    # 解析文章資料
    def get_words(self, response):
        pages = 1
        for data in response:
            # 轉化為json資料
            a = data[5:-1]
            text = ''
            d = json.loads(a)
            # 提取 c鍵 的文字資料
            for j in d['document.xml']:
                for c in j['c']:
                    text += '\n'
                    for c2 in c['c']:
                        try:
                            text += c2['c'] + '\n'
                        except:
                            continue
            text += f'\n------------------------當前第{pages}頁-------------------------\n'
            pages += 1
            self.list_info.append(text)

    # 儲存檔案
    def save_info(self, title, path):   
        os.makedirs('百度文庫', exist_ok=True)
        with open(path, 'w', encoding='utf-8') as f:
            f.writelines(self.list_info)

    def get_img(self, start_url):
        print('開始嘗試解析百度文庫圖片...\n')
        r = self.session.get(start_url)
        r.encoding = r.apparent_encoding
        title = re.findall("'title': '(.*?)'", r.text)[0]
        print(title)
        docId = re.findall("'docId': '(.*?)'", r.text)[0]
        totalPageNum = re.findall("'totalPageNum': '(.*?)'", r.text)[0]
        totalPageNum = int(totalPageNum) + 1

        return totalPageNum, title, docId

    def download_img(self, totalPageNum, title, docId):
        for pn in range(1, totalPageNum):
            params = {'doc_id': docId, 'pn': pn, 'rn': 1, 'type': 'ppt', }
            api_url = 'https://wenku.baidu.com/browse/getrequest'
            r = self.session.get(api_url, params=params, headers=self.headers)
            src = r.json()[0].get('zoom')
            os.makedirs(title, exist_ok=True)
            path = title + '/' + str(pn) + '.jpg'
            urlretrieve(src, path)
            print(f'正在提取第{pn}頁,請稍等...')
    
    # 文章去重
    def set_word(self, path):
        word_set = list()
        with open(path, 'r', encoding='utf-8') as f:
            for each_line in f:
                word_set.append(each_line)
        result = list(set(word_set))
        result.sort(key=word_set.index)
        with open(path, 'w', encoding='utf-8') as f:
            f.writelines(result)
            print('done')

	# 獲取文字內容
    def run_word(self):
        print('開始嘗試解析百度文庫頁面...\n')
        start_url = input('輸入百度文庫中的連線:')
        print('running...\n')
        start_url = re.sub('wenku', 'wk', start_url)
        html = self.get_html(start_url)
        param, ranges, title = self.parse_html(html)
        print(f'當前文章:{title}\n')
        path = '百度文庫/' + title + '.doc'
        response = self.words_data(param, ranges)
        self.get_words(response)
        self.save_info(title, path)
        self.set_word(path)
        print('done!!!')
        print('程式執行完畢!')

	# 獲取圖片資料
    def run_img(self):
        print('開始嘗試解析百度文庫圖片資訊...\n')
        start_url = input('輸入百度文庫中的連線:')
        print('running...\n')
        totalPageNum, title, docId = self.get_img(start_url)
        self.download_img(totalPageNum, title, docId)
        print('done!!!')
        print('程式執行完畢!')


if __name__ == '__main__':
    wk = BaiduWk()
    wk.run_word()
    # wk.run_img()

在pycharm裡面執行即可,也是很久之前轉的程式碼,由於自己只記錄了程式碼,原文連結沒儲存…不過之前經常用

更多相關推薦

Python爬取百度文庫

Python爬取百度文庫爬取網址:https://wenku.baidu.com/view/aa31a84bcf84b9d528ea7a2c.html1....

繼續閱讀

python可以下載百度文庫_python+...

有些時候我們需要用到百度文庫的某些文章時,卻發現需要會員才能下載,很難受,其實我們可以通...

繼續閱讀

python爬蟲百度文庫原始碼_Python...

首先先分享下github這篇文章吧,參考了部分程式碼,但我想做一個很詳細的解讀。新版百度文庫爬蟲...

繼續閱讀

Python爬取百度文庫並存儲為word...

在做爬取資料之前,你需要下載安裝兩個東西,一個是urllib,另外一個是python-docx。doc是微軟...

繼續閱讀

超簡單,一行程式碼獲取百度文庫內...

文庫類資料應該是不少白嫖黨的最愛,本渣渣白嫖怪也不例外,尤其是百度文庫,內容多,資料全,...

繼續閱讀

Python爬蟲——爬取百度文庫文章

爬取-百度文庫中的文章爬取大多數百度文庫的文章或圖片資料建立了兩個呼叫方法,分別獲取文字...

繼續閱讀

python爬取百度圖片之js逆向

開Network頁,看到一堆js加密的引數:按,全域性搜尋欄位:點進,按一下大括號搜尋欄位,在2160行:...

繼續閱讀

python百度文庫文字提取_百度文...

臨近畢業,學校要求寫實習報告,自己寫報告是不可能寫的,肯定是抄啊,百度文庫能給你白抄麼,...

繼續閱讀

python爬取百度文庫DOC文件的簡...

談談需求百度文庫在我們需要查詢複製一些文件的時候經常用到,但是,現在的百度文庫沒以前那麼...

繼續閱讀