У меня есть следующий скрипт Python, использующий Scrapy:
import scrapy
class ChemSpider(scrapy.Spider):
name = "site"
def start_requests(self):
urls = [
'https://www.site.com.au'
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
category_links = response.css('li').xpath('a/@href').getall()
category_links_filtered = [x for x in category_links if 'shop-online' in x] # remove non category links
category_links_filtered = list(dict.fromkeys(category_links_filtered)) # remove duplicates
for category_link in category_links_filtered:
if "medicines" in category_link:
next_page = response.urljoin(category_link) + '?size=10'
self.log(next_page)
yield scrapy.Request(next_page, callback=self.parse_subcategories)
def parse_subcategories(self, response):
for product in response.css('div.Product'):
yield {
'category_link': response.url,
'product_name': product.css('img::attr(alt)').get(),
'product_price': product.css('span.Price::text').get().replace('\n','')
}
Мое решение будет запускать несколько экземпляров этого скрипта, каждый из которых будет собирать различное подмножество информации из разных «категорий».Я знаю, что вы можете запустить scrapy из командной строки для вывода в файл json, но я хочу сделать вывод в файл из функции, поэтому каждый экземпляр записывает в свой файл.Будучи новичком в Python, я не уверен, куда идти со своим сценарием.Мне нужно получить вывод yield в файл во время выполнения скрипта.Как мне этого добиться?Будут очищены сотни строк, и я недостаточно знаком с тем, как работает yield, чтобы понять, как «вернуть» из него набор данных (или список), которые затем можно записать в файл.