サードパーティの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()