python + urllibは+ lxmlのをクロールフィクション

urllibはのインポート解析
 から urllibはのインポート要求
 から lxmlのインポートetree
 インポート時間

クラス:新規
     DEF  __init__(自己、* :引数)
        self.name = 引数[0] 
        self.dict =引数[1 ] 
        self.txt = '' 
        のためのキーソート(self.dict):
            self.txt = self.txt + self.dict [キー] 

    DEF (自己)書き込み:
        F =オープン(self.name +' .txtの'' W ' 
        f.write(self.txt)
        f.close() 

获取网页源代码
DEF get_http_page(URL、** KW):
    ヘッダー = {
         " ユーザエージェント"" はMozilla / 5.0 (Windows NTの10.0; Win64の、のx64)のAppleWebKit / 537.36(KHTML、ヤモリ等)クローム/ 77.0.3865.90サファリ/ 537.36 " 
    } 
    REQ = request.Request(URL、ヘッダー= ヘッダ)
    応答 = request.urlopen(REQ)
    ページ = response.read()
    エンコーディング =' GBK ' 
    もしKW:
        エンコーディング = KW [ ' エンコーディング' ] 
    ページ = page.decode(符号化)
     リターンページ

获取漫画目录
DEF get_comics_directory(URL):
    url_list = [] 
    ページ = get_http_page(URLエンコード= " UTF-8 ' 
    HTML = etree.HTML(ページ)
    の結果 = html.xpath(' / HTML /本体/ DIV [2] / DIV / DIV [2] / H3 / A ' 
    elment_select = なし
    場合lenは(結果):
        URL2 = [0]に.get(結果' のhref ' 場合をURL2:
        ページ = get_http_page(URL2)
        HTML = etree.HTML(ページ)
        elment_select = html.xpath(' / HTML /本体/ DIVの[ 4] / DIV [9] /スパン[2] /選択' 場合:(elment_selectをLEN)
            result_option = elment_select [0] .findall(' オプション' のためにオプションresult_option:
                url_list.append('https://m.wenxuemi6.com {} ' .format(option.get(' ' )))
     を返すurl_list 

DEF(downdload_txt url_list、** KW):
     場合KW:
        開始 = INT(KW [ ' 開始' ] )
        停止 = INT(KW [ ' 停止' ])
         場合 > = 0を起動し、 <LEN(url_list開始)及び停止>起動 <停止)LEN(url_listを:
            カウント = KW [ ' 開始' ]
            COUNT_MAX =キロワット[ ' STOP ' ]
     
        COUNT = 0 
        COUNT_MAX = LEN(URL_LIST)
     印刷' お待ちください、ディレクトリやチャプターアドレスをクロールしている...... ' 
    D = {}
     しばらく COUNT < COUNT_MAX:
        URL = URL_LIST [ COUNT] 
        ページ = get_http_page(URL)
        HTML = etree.HTML(ページ)
        結果は = html.xpath(' / HTML /ボディ/ DIVの[4] / UL [2] /リチウム/ A '
        TXT = '' 
        もしタイプ(結果)。__name__ == ' リスト' のために L における結果:
                URL = ' https://m.wenxuemi6.com {} ' .format(l.get(' のhref ' ))
                 #1 url_list.append( 'https://でM .wenxuemi6.com {}」形式(l.get( 'のhref')))
                プリント' URLによってダウンロード章:{} ' .format(URL))
                D2 = { ' {} ' .format(カウント):} 
                ページ = get_http_page(URL)
                のhtml = etree.HTML(ページ)
                url_next = html.xpath(' // * [ID @ = "pb_next"] ' 
                、T = html.xpath(" // * [ID @ =」 NR1 "] /テキスト()' 
                T2 = html.xpath(' // * [ID = @" NR1 "] / P ' 
                txt_title = '' 
                txt_title_list = html.xpath(' // * [ID @ =" nr_title "] /テキスト()"の場合タイプ(txt_title_list)。__name__ == ' リスト' もし(LEN(txt_title_list)== 1 ):
                        txt_title = txt_title_list [0] 
                TXT = TXT + txt_title + ' \ R \ n ' 
                のために L2 におけるT:
                    TXT = TXT + L2 + ' \ R \ n ' 
                もし型(T2)。__name__ == ' リスト' もし LEN(T2)== 1 
                        URL= ' https://m.wenxuemi6.com {} ' .format(l.get(' のhref '): - 5] + ' _2.html ' プリント' ダウンロード章URLによって:{} ' .format (URL))
                        ページ = get_http_page(URL)
                        のhtml = etree.HTML(ページ)
                        トン = html.xpath(' // * [@ ID = "NR1"] /テキスト()' のために L2 でのT:
                            TXTTXT + L2 + = ' \ R&LT \ N- ' 
                D2〔' {} ' .format(カウント)= TXTの
                d.update(D2)
                time.sleep( 1 リターンD 



IF  __name__ == ' __main__ ' 
    txt_name = INPUT (" 検索対象のタイトルを入力してください:" 
    URL = ' https://m.wenxuemi6.com/search.php?keyword= {} ' .format(parse.quote(txt_name))
    リファラー = URLの
    URL_LIST =get_comics_directory(URL)
    小説は、下の最初のページディレクトリをダウンロードした 
    D = downdload_txt(URL_LIST、[スタート] = 0、= STOP。1 
    N1 = 小説(txt_name、D)
    書き込みファイル[txt_name] .txtのカレントディレクトリへの
    N1。書き込み() 

    ダウンロード完全新規 
    D2 = downdload_txt(URL_LIST、START = 0、= STOP 1 
    N2 = 新規(txt_name、D2)
     #1 ライト・ファイル[txt_name] .txtの現在のディレクトリに 
    n2.write()

 

おすすめ

転載: www.cnblogs.com/Dmail/p/11615049.html