ホームページ  >  記事  >  ウェブフロントエンド  >  Mekong.com_html/css_WEB-ITnose での画像クロールのスクレイピーな実際の戦闘についての最初の紹介

Mekong.com_html/css_WEB-ITnose での画像クロールのスクレイピーな実際の戦闘についての最初の紹介

WBOY
WBOYオリジナル
2016-06-24 11:53:111616ブラウズ

私は過去 2 日間、Scrapy クローラー フレームワークを研究しており、練習のためにクローラーを作成する予定です。私がよくやるのは写真を見ることです。そうです、芸術的な写真です。もっと美しい写真を見ると、間違いなく美意識が高まり、エレガントなプログラマーになれると信じています。 O(∩_∩)O~ というのは冗談なので、早速本題に入り、イメージ クローラーを作成してみましょう。

デザインアイデア: クロールのターゲットは Meikong.com のモデル写真で、CrawlSpider を使用して各写真の URL アドレスを抽出し、抽出された画像 URL を静的 HTML テキストに書き込んで保存すると、それを開いて画像を表示できます。 私の環境はwin8.1、python2.7+Scrapy 0.24.4です。環境の設定方法は説明しません。Baiduで検索してください。

参照官方文档,我总结了建立爬虫程序大致有四个步骤:

  • 创建一个scrapy project
  • 定义需要从网页中提取的要素項目
  • 实スパイダーの一種、インターフェイス経由で URL とコピーを完了しますアイテム抽出機能
  • アイテムパイプラインクラスを実装してアイテムの保管機能を完成させます。
  • 次のステップは非常に簡単です。手順に従ってください。まず、プロジェクトに moko という名前を付けます。 Scrapy startproject moko コマンドを入力すると、現在のディレクトリに moko ファイル ディレクトリが作成されます。ファイルの使用に興味がある場合は、主にドキュメントを参照してください。今回使用しました。

    項目の定義 items.py でキャプチャしたいデータを定義します。

    # -*- coding: utf-8 -*-# Define here the models for your scraped items## See documentation in:# http://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass MokoItem(scrapy.Item):    # define the fields for your item here like:    # name = scrapy.Field()    url = scrapy.Field()

  • ここの URL は、後で説明する最終結果の dict 番号を保存するために使用されます。名前はランダムに付けられます。 。たとえば、画像の作成者の名前もクロールする必要がある場合は、name =crapy.Field() などを追加できます。
  • 次に、Spiders フォルダーに入り、その中に Python ファイルを作成します。ここに mokospider.py という名前を付け、Spider を実装するためのコア コードを追加します。
  • Spider は、scrapy.contrib.spiders.CrawlSpider から継承された Python クラスです。必須の定義済みメンバーが 3 つあります

    name: name、このスパイダーの識別子は一意である必要があります。異なるクローラーは異なる名前を定義します

    start_urls: URL のリスト、スパイダーはこれらの Web ページからクロールを開始します

    parse() : 解析メソッドは、呼び出されると、各 URL から返された Response オブジェクトを唯一のパラメータとして渡し、キャプチャされたデータ (項目に解析) を解析して照合し、さらに多くの URL を追跡します。私たちのプロジェクトの名前は MOKO です。クローラーによって許可されるフィールド、Allowed_domains は、制限領域である moko.cc に限定されます。以下のウェブページ。クローラーの開始アドレスは http://www.moko.cc/post/aaronsky/list.html から始まります。次に、クロール ルール Rule を設定します。これが、CrawlSpider が基本的なクローラーと異なる点です。たとえば、Web ページ A からクロールを開始します。Web ページ A には多数のハイパーリンク URL があります。クローラーは、設定されたルールに従ってクロールを実行します。ルールに準拠する URL にハイパーリンクを設定し、このプロセスを繰り返します。コールバック関数は、Web ページがこのコールバック関数を呼び出すときに使用されます。parse というデフォルト名を使用しなかった理由は、公式ドキュメントに、parse がクローラー フレームワークで呼び出され、競合が発生する可能性があると記載されているためです。 ターゲット http://www.moko.cc/post/aaronsky/list.html には、Web ページにたくさんの写真があります。たとえば、www.moko.cc/post/1052776.html などです。 , http://www.moko.cc/post/ ここにあるものはすべて同じで、各リンクの異なる部分は後ろの番号です。ここでは、正規表現を使用してルールを入力します。 rules = (Rule(SgmlLinkExtractor(allow=('/post/d*.html')), callback = 'parse_img', follow=True),) は、現在の Web を指します。ページ、すべて一致 サフィックス /post/d*.html を持つすべての Web ページがクロールされ、parse_img を呼び出すことによって処理されます。

  • 次に、解析関数 parse_img を定義します。これはより重要です。これが渡すパラメーターは、URL を開いた後にクローラーによって返される応答オブジェクトです。必要なものを変換するためにクローラーを使用します。コンテンツはフィルターで除外されます。どうやってフィルタリングするのでしょうか? ? ?笑、xpath() パス式を使用してコンテンツを解析する素晴らしい Selector メソッドがあります。解析する前に、Web ページを詳細に分析する必要があります。ここで使用するツールは firebug です。インターセプトされた Web コア コードは

      我们需要的是src2部分!他在b54a6d2f211466cf9434ded6b4cb3a54标签下的a1f02c36ba31691bcfe87b2722de723b里面, 首先实例一个在Items.py里面定义的MokoItem()的对象urlItem,用牛逼的Selector传入response,我这里用了一个循环,每次处理一个url,利用xpath路径表达式解析取出url,至于xpath如何用,自行百度下。结果存储到urlItem里面,这里用到了我们Items.py里面定义的url了!

          然后定义一下pipelines,这部分管我们的内容存储。

    from moko.items import MokoItemclass MokoPipeline(object):    def __init__(self):        self.mfile = open('test.html', 'w')    def process_item(self, item, spider):        text = '<img src="' + item['url'] + '" alt = "" />'        self.mfile.writelines(text)    def close_spider(self, spider):        self.mfile.close()

     

         建立一个test.html文件用来存储结果。注意我的process_item里用到了一些html规则,作用是直接在html里面显示图片。结尾在定义一个关闭文件的方法,在爬虫结束时候调用。

         最后定义设置一下settings.py

    BOT_NAME = 'moko'SPIDER_MODULES = ['moko.spiders']NEWSPIDER_MODULE = 'moko.spiders'# Crawl responsibly by identifying yourself (and your website) on the user-agent#USER_AGENT = 'moko (+http://www.yourdomain.com)'ITEM_PIPELINES={'moko.pipelines.MokoPipeline': 1,}     

     


     

          最后展示一下效果图吧,祝各位玩的快乐 ^_^

                   

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。