通过引用列表从PHP/Delphi调用scrapy
我正在构建一个“刮擦蜘蛛”,它可以检查在线网店中是否有某些产品的库存 我们的想法是从PHP/Delphi代码中调用这个spider,传递一个产品列表(3500个参考)。然后,爬行器返回另一个包含股票信息的列表 这是我的蜘蛛:通过引用列表从PHP/Delphi调用scrapy,php,python,scrapy,Php,Python,Scrapy,我正在构建一个“刮擦蜘蛛”,它可以检查在线网店中是否有某些产品的库存 我们的想法是从PHP/Delphi代码中调用这个spider,传递一个产品列表(3500个参考)。然后,爬行器返回另一个包含股票信息的列表 这是我的蜘蛛: import scrapy from scrapy.crawler import CrawlerProcess class Spider(scrapy.Spider): name = "Spider" start_urls = ['https://www
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())
所以。。。正确的方法是什么?我知道您可以使用以下方法将参数传递给spider:
def __init__(self, product=None, *args, **kwargs):
super(Spider, self).__init__(*args, **kwargs)
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'])
我知道您可以使用CrawlerProcess从另一个python脚本执行spider。另外,我知道您可以使用以下方法从PHP调用python脚本:
<?php
$command = escapeshellcmd('/home/myscript.py');
$output = shell_exec($command);
echo $output;
?>
但我不知道如何合并所有这些方法
提前感谢。您必须使用一些数据存储来传输数据。
因此,在其他编程语言中,您可以将数据保存在某个文件或数据库中,例如csv或json,然后通过命令参数将文件名传递给scrapy spider。最后,在spider中,您可以迭代文件内容以生成请求 例如,如果我们有这个json:
{ "items": [
{ "url": "http://example1.com" },
{ "url": "http://example2.com" }
]}
我们将使用类似于:
def __init__(self, product=None, *args, **kwargs):
super(Spider, self).__init__(*args, **kwargs)
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'])
谢谢你的回答。我喜欢这个主意。我还有一个问题,也许你知道答案:)谢谢!