Baiduのポストバーの写真をクロール小さな爬虫類のプログラム

サードパーティのPythonライブラリリクエストライブラリーの要求と、そのようなすべての画像にBaiduのポストバーポストバー任意の名前をクロールなどの解析ライブラリlxmlのツールを使用します:

次のような要件は以下のとおりです。

  1 ------オブジェクト指向プログラミングパラダイム、。

  2は、簡単な抗抗クライミングの措置をとる:要求時間があまりにも頻繁にすべきではないとして、リクエストヘッダのUser-Agent隠すためのツールとクロールがランダムに抗登るを回避するためにランダムのUser-Agent生成します

  3、クローリングのみバーの所有者が写真を掲載、他の画像をクロール禁止します

コードは以下の通りであります:

  

インポート要求
 から lxmlのインポートetree
 インポートのOS
 インポートから fake_useragent 輸入UserAgentの
 輸入警告が
 インポートランダム

warnings.filterwarningsを(' 無視' 


クラス:BaiduSpider(オブジェクト)
     デフ __init__ (自己、キーワード、PAGE_NUMBER):
        self.url = " のhttp:/ /tieba.baidu.com/ ' 
        self.useragent = ユーザーエージェント()
        self.headers = { 'ユーザーエージェント' :self.useragent.random} 
        self.keyword = キーワード
        self.page_number = PAGE_NUMBER 

    获取帖子链接
    DEF get_tlink(自己、データ):
        RES = requests.get(self.url、ヘッダー= self.headers、paramsは= データ)
        res.encoding = ' UTF-8 ' 
        のhtml = res.text 
        のhtml = html.replace(R " <! - "'').replace(R " - > "'' )
        印刷(HTML) 
        parse_html = etree.HTML(HTML)
        t_list = parse_html.xpath(
             ' // UL [ID = "thread_list" @] /リー[クラス= "j_thread_list clearfix" @] / DIV // A / HREF @ ' #の印刷(t_list)
        のためにトンt_list:
            各ポストのリンクをステッチ 
            t_link = http://tieba.baidu.com  + トンの
             リンクは、イメージリンクにリクエストを送信し、画像リンクを取得し、ポストにリクエストを送信するために、お近くに画像を保存
            #の印刷(t_link)
            self.get_ilink(t_link) 

    抽出画像リンク
    DEF get_ilink(セルフ、t_link):
        RES self.headers).content= requests.get(t_link、ヘッダー= self.headers)
        res.encoding = ' UTF-8 ' 
        HTML = res.text 
        parse_html = etree.HTML(HTML)
        i_list = parse_html.xpath(
             ' //のdiv [@クラス=」 d_post_content_main d_post_content_firstfloor "] // divの[クラス@ =" d_post_content j_d_post_content clearfix BDE_Image "] / @のSRC "] / IMG [クラス= @" "  プリント(i_list)
         のためのi_list:
            HTML = requests.get(I、heasers =
            self.write_image(HTML、I) 

    保存图片
    DEF write_image(自己、HTML、I):
        ファイル名 = ' ./ ' + self.keyword + ' / ' + I [-10 :] 
        (オープンファイル名で、' WB ' )Fとして:
            f.write(HTML)

    DEF メイン(自己):
         もしos.path.exists(self.keyword):
            os.remove(self.keyword)
         I における範囲(1、self.page_number + 1 ):
            データ = {
                 ' KW' :Self.keyword、
                 ' PN ':STR(。(I - 1)* 50 
            } 
            self.get_tlink(データ)
            を印刷' ページ%dはダウンロードした%のI)
            time.sleep(random.randint( 1、。 10 ))


IF  __name__ == " __main__ " 
    スパイダー = Baiduspider(' 入り口こと'。、1 
    spider.main()

 

  

おすすめ

転載: www.cnblogs.com/yuxiangyang/p/11093417.html