2017-02-22 4 views
0

私は、オンラインWebショップにいくつかの製品の在庫があるかどうかを調べるスクラピースパイダーを構築しています。参照リスト付きPHP/Delphiからの呼び出しの処理

アイデアは、このスパイダーをPHP/Delphiコードから呼び出して、製品リスト(3500件のリファレンス)を渡すことです。次に、スパイダーは株価情報を含む別のリストを返します。

これは私のクモです:

import scrapy 
from scrapy.crawler import CrawlerProcess 


class Spider(scrapy.Spider): 
    name = "Spider" 
    start_urls = ['https://www.url.net/Administration/Account/Login'] 

    def parse(self, response): 
     return scrapy.FormRequest.from_response(
      response, 
      formdata={'UserName': 'username', 'Password': 'password'}, 
      callback=self.after_login 
     ) 

    def after_login(self, response): 
     yield scrapy.Request(url="https://www.url.net/Home/Home/ShowPriceDetail?articleNo=" + REFERENCE, callback=self.parse_stock) 

    def parse_stock(self, response): 
     print("STOCK" + response.selector.xpath('//*[@id="priceDetails"]/form/div[8]/div[1]/span/span[2]/text()').extract_first()) 
     print("Date" + response.selector.xpath('//*[@id="priceDetails"]/form/div[8]/div[1]/span/span[1]/i/@style').extract_first()) 

そう...これを行うには正しい方法は何ですか?

def __init__(self, product=None, *args, **kwargs): 
     super(Spider, self).__init__(*args, **kwargs) 

そして、私はあなたがCrawlerProcessで別のPythonスクリプトからクモを実行できることを知っている:私はあなたのようなものを使用してクモに引数を渡すことができることを知っています。また、私はあなたが使用してPHPからPythonスクリプトを呼び出すことができることを知っている:

<?php 

$command = escapeshellcmd('/home/myscript.py'); 
$output = shell_exec($command); 
echo $output; 

?> 

しかし、私は...この方法のすべてをマージする方法を事前に

感謝を知りません。

答えて

1

データを転送するには、データストレージを使用する必要があります。
他のプログラミング言語では、データをファイルやデータベースに保存します。 csvまたはjsonと入力し、コマンド引数を使用してファイル名をスクラピースパイダーに渡します。最後に、あなたのスパイダーでファイルの内容を繰り返してリクエストを生成することができます。あなたの答えGranitosaurusため

class MySpider(scrapy.Spider): 
    name = 'myspider' 

    def __init__(self, *args, **kwargs): 
     super(self, *args, **kwargs) 
     self.filename = kwargs.get('filename', None) 

    def start_requests(self): 
     if not self.filename: 
      raise NotImplementedError('missing argument filename') 
     with open(self.filename, 'r') as f: 
      data = json.loads(f.read()) 
     for item in data['items']: 
      yield Request(item['url']) 
+0

ありがとう:

{ "items": [ { "url": "http://example1.com" }, { "url": "http://example2.com" } ]} 

私たちのようなものを使用します。私たちは、このJSONを持っている場合たとえば

。私はその考えが好きです。私は別の質問があります。答えがわかっているかもしれません:) http://stackoverflow.com/questions/42416020/scrapy-performance ありがとう! –

関連する問題