python — вызов scrapy из PHP / Delphi со списком ссылок

Я создаю скрапа-паука, который проверяет, есть ли запасы некоторых продуктов в онлайн-магазине.

Идея состоит в том, чтобы вызвать этого паука из кода PHP / Delphi, передав список продуктов (3500 ссылок). Затем паук возвращает другой список с информацией об акциях.

Это мой паук:

import scrapy
from scrapy.crawler import CrawlerProcessclass 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)

И я знаю, что вы можете выполнить паук из другого скрипта Python с CrawlerProcess. Кроме того, я знаю, что вы можете вызвать скрипт Python из PHP, используя:

<?php

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

?>

Но я не знаю, как объединить все эти методы …

Заранее спасибо.

0

Решение

Вы должны использовать некоторое хранилище данных для передачи ваших данных.
Так в вашем Другой языком программирования вы сохраняете данные, которые у вас есть, в каком-то файле или базе данных, например CSV или JSON, а затем вы передаете имя файла своему пауку Scrapy через аргумент команды. Наконец, в вашем пауке вы можете перебирать содержимое файла для генерации запросов.

Например, если у нас есть этот JSON:

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

Мы бы использовали что-то вроде:

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'])
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]