ホームページ >ウェブフロントエンド >htmlチュートリアル >Mekong.com_html/css_WEB-ITnose での画像クロールのスクレイピーな実際の戦闘についての最初の紹介
私は過去 2 日間、Scrapy クローラー フレームワークを研究しており、練習のためにクローラーを作成する予定です。私がよくやるのは写真を見ることです。そうです、芸術的な写真です。もっと美しい写真を見ると、間違いなく美意識が高まり、エレガントなプログラマーになれると信じています。 O(∩_∩)O~ というのは冗談なので、早速本題に入り、イメージ クローラーを作成してみましょう。
デザインアイデア: クロールのターゲットは Meikong.com のモデル写真で、CrawlSpider を使用して各写真の URL アドレスを抽出し、抽出された画像 URL を静的 HTML テキストに書き込んで保存すると、それを開いて画像を表示できます。 私の環境はwin8.1、python2.7+Scrapy 0.24.4です。環境の設定方法は説明しません。Baiduで検索してください。
参照官方文档,我总结了建立爬虫程序大致有四个步骤:
次のステップは非常に簡単です。手順に従ってください。まず、プロジェクトに 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()
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 を呼び出すことによって処理されます。
我们需要的是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,}
最后展示一下效果图吧,祝各位玩的快乐 ^_^