2017-07-01 29 views
0

ページに関するすべての情報を取得するクローラ(SCRAPYを使用)を実装する方法。例えば、画像、CSSファイルのサイズの大きさとは、.txtファイル(page1.txt、page2.txt)クローラがページに関する情報を取得する(Scrapy)

に保存私は画像でこれを試してみました:

class TestSpider(scrapy.Spider): 

    name="Test" 
    start_urls = ["http://www.example.com/page1.html", "http://www.example.com/page2", ] 

    def start_requests(self): 
      for url in self.start_urls: 
        yield SplashRequest(url, self.parse, endpoint='render.html', args={'wait':5}) 

    def parse(self, response): 

      for url_image in response.xpath('//img/@src').extract(): 
        yield scrapy.Request(url=url_image, callback=self.parse_image) 

    def parse_image(self, response): 
      with open('page1.txt', 'a+') as f: 
        f.write(str(len(response.body))) 

このコードは、すべてのサイズの画像を保存しますpage1.txtで、parse_image()にパラメータを送信する方法は?例えば、filenameをparse_image()関数とします。

スプラッシュブラウザは、私が必要とするものを正確に行います - >link。あなたはRequestmeta属性を使用することができますあなたのparseメソッドとの間でデータを転送する

答えて

0

def parse(self, response): 
    data = {'foo': 'bar'} 
    yield Request(url, self.parse2, meta=data) 

def parse2(self, response): 
    data = response.meta 
    # {'foo': 'bar'} 
+0

パーフェクト!さらに1つの質問、私はparse2()から任意の値を返すことができますか? Parse2()メソッドはscrapy.Requestクラスのみを返しますか? – Ricardo

+0

可能ですが、スクリーニング解析メソッドはリクエストまたはアイテム/ディクショナリオブジェクトを返すか生成することが期待されます。 – Granitosaurus

関連する問題