乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      拒絕我復(fù)制?那我就利用Python跟我一起寫某度文庫下載器

       老三的休閑書屋 2021-08-28

      前言

      度娘啊,你以為你把百度網(wǎng)盤取消限速了,我們就滿意了?當(dāng)然不滿意,還有某度文庫呢!本來好好的文檔,非得不讓我們下載……今天,就教大家跟我一起寫某度文庫下載器Weeker,拒絕某庫,從我做起。

      私信小編01即可獲取大量Python學(xué)習(xí)資源

      我們的下載器是一個GUI程序,具體架構(gòu)是,先寫核心文件(get.py),再寫命令行解析文件(weeker.py),接著使用Fire生成命令行,最后用Gooey把CLI轉(zhuǎn)換為GUI。

      準(zhǔn)備

      安裝

      1. 安裝Python 3.8;
      2. 安裝依賴(依賴的作用下文會詳解):pip install requests docx beautifulsoup4 Gooey

      目錄

      初始化項目(下面的腳本是在Unix或Linux上運行的):

      復(fù)制代碼 隱藏代碼cd /path/to/projectmkdir Weekertouch get.py weeker.py

      爬蟲核心

      第一步,打開get.py,先引入類庫:

       復(fù)制代碼 隱藏代碼from os import getcwd, systemfrom re import subimport requestsimport docxfrom bs4 import BeautifulSoup

      每個模塊的作用如下:

      模塊名稱

      作用

      os

      獲取當(dāng)前目錄

      re

      替換文檔中的特定字符

      requests

      用來做網(wǎng)絡(luò)請求,不用多說。

      docx

      用來將txt轉(zhuǎn)換為docx格式。

      bs4

      用來把文本從html中解析出來。

      由于保存文件時我們需要判斷路徑,定義一個pwd常量,用來存儲“當(dāng)前路徑:

      復(fù)制代碼 隱藏代碼pwd = getcwd()

      再聲明一個get
      url:ua:path:output:convert
      方法,來實現(xiàn)我們的爬蟲函數(shù),其中:

      參數(shù)名稱

      作用

      url

      文檔地址,比如隨便搜了一個:
      https://wenku.baidu.com/view/11ebd2af42323968011ca300a6c30c225901f0ea.html?fr=search

      ua

      User Agent。我試了一下,如果使用瀏覽器UA是不行的,會爬到一個廣告界面,然后告訴你此操作需要登錄,因此我們要使用Googlebot或Baiduspider來繞過UA檢測(這就是為什么搜索引擎能搜到),以為我們是一個搜索引擎。跟推薦使用后者,畢竟百度和文庫一家人嘛。

      path

      存儲目錄,不包括文件名。

      output

      帶有后綴名的文件名。

      convert

      轉(zhuǎn)換后的格式。因為作者比較懶,所以此字段只能填寫docx。

      編寫get:::::函數(shù)

      獲取html&解析

      把光標(biāo)移到get:::::函數(shù)。首先照例我們要用requests,并且祭上bs4一條龍解析:

       復(fù)制代碼 隱藏代碼headers = { 'User-Agent': ua }result = requests.get(url, headers=headers)soup = BeautifulSoup(res.text, 'html.parser')# 為了方便管理文本,我們定義一個數(shù)組用來存儲文檔的每一行everyline = []

      添加標(biāo)題

      我們給文檔先添上標(biāo)題,也就是網(wǎng)頁的標(biāo)題。

      復(fù)制代碼 隱藏代碼everyline.append(soup.title.string)

      但是這樣會有一個問題,添加出來的標(biāo)題都是“xxxxxxx_百度文庫”,很不雅觀。所以抬上re.sub作替換,改成:

       復(fù)制代碼 隱藏代碼everyline.append(re.sub('_百度文庫', '', soup.title.string, 1))

      獲取正文

      通過觀察網(wǎng)頁,我們發(fā)現(xiàn),bd doc-reader這個class有重大嫌疑,這個class里的東西都是正文內(nèi)容:

      拒絕我復(fù)制?那我就利用Python跟我一起寫某度文庫下載器

      我們通過bs4解析它,發(fā)現(xiàn)內(nèi)容中有很多\n、\x0c和空格,\n是換行符,我們把它分割到數(shù)組中,而后兩者分別刪除即可:

      復(fù)制代碼 隱藏代碼for doc in soup.find_all('div', attrs={'class': 'bd doc-reader'}): everyline.extend(doc.get_text().split('\n')) # 擴展數(shù)組 everyline = [i.replace(' ', '') for i in everyline] everyline = [i.replace('\x0c', '') for i in everyline]

      保存文件

      接下來就是保存文件。我的思路是,先按照txt格式保存,然后再判斷convert參數(shù),如果填寫了docx,再將txt加后綴并修改為docx。

       復(fù)制代碼 隱藏代碼final_path = path# 如果是相對路徑,連接pwd改成絕對路徑,否則python不支持。if not path.startswith('/'):    final_path = pwd + '/' + final_pathtry:    file = open(final_path + '/' + output, 'w', encoding='utf-8')    for line in everyline:        file.write(line)        file.write('\n')    file.close()except FileNotFoundError as err:    print('wenku: error: Output directory does not exist. Quitting.')    exit(1)# 如果有convert請求if convert == 'docx':    with open(final_path + '/' + output) as f:        docu = docx.Document() # 創(chuàng)建對象        docu.add_paragraph(f.read()) # 添加段落        docu.save(final_path + '/' + output + '.' + convert) # 保存文檔,文件名為xxx.xxx.docx        system('rm ' + final_path + '/' + output) # 刪除try中保存的文件

      創(chuàng)建GUI

      打開weeker.py。
      首先是兩句 import,其中Gooey可以用類似argparse的語法將CLI轉(zhuǎn)換為GUI。

      復(fù)制代碼 隱藏代碼from gooey import Gooey, GooeyParserimport get

      接著添加if __name__ == '__main__'

       復(fù)制代碼 隱藏代碼if __name__ == '__main__':    main()

      我們來定義一下這個main()

      復(fù)制代碼 隱藏代碼@Gooey(encoding='utf-8', program_name='Weeker ', language='chinese')def main(): parser = GooeyParser(description='百度文庫下載器,干杯!') parser.add_argument('url', metavar='文檔地址', widget='TextField') parser.add_argument('ua', metavar='用戶UA', widget='Dropdown', choices={'Googlebot': 1, 'Baiduspider': 2}) parser.add_argument('path', metavar='保存路徑', widget='DirChooser') parser.add_argument('output', metavar='重命名', widget='TextField') parser.add_argument('convert', metavar='格式轉(zhuǎn)換', widget='Dropdown', choices={'docx': 1}) args = parser.parse_args() get.get(args.url, ua=args.ua, path=args.path, output=args.output, convert=args.convert)

      @Gooey是一個修飾器,可以把main()轉(zhuǎn)換為一個Gooey函數(shù)。在main中,我們寫下類似argparseparser.add_argument函數(shù),最終定義args = parser.parse_args(),從args的成員獲取每個參數(shù)的輸入,傳到get.py里。我們運行一下,神奇的一幕發(fā)生了:

      拒絕我復(fù)制?那我就利用Python跟我一起寫某度文庫下載器

      我們成功地把CLI轉(zhuǎn)換成了GUI!?。?/span>

      注I:如果你喜歡命令行,可以GitHub搜python-fire,直接將函數(shù)和參數(shù)暴漏給CLI,效果更佳。
      注II:因為電腦原因,打包不了成品,因此有需要者請自行編譯。
      注III:附件里有兩個py文件。
      注IV:我剛看見源碼里面有一句import寫錯了,如果你下載了源碼,請先照文中代碼核對一下。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多