Я создал анализатор scrapy, который работает, и я загружаю настройки из файла json, чтобы установить xPath для очистки и других настроек.
{
"urlEntry": "https://www.realcommercial.com.au/for-sale/",
"urlDomain": ".*realcommercial.com.au/for-sale/.*",
"urlScrape": ".*?\\d{9}",
"bindings": [
{
"name": "ID",
"xPath": "//span[contains(@class, \"propertyId\")]/text()",
"filter": "\\d{9}"
},
...
Есть куча привязок. Я загружаю файл настроек в паука успешно, как это
self.settings = json.load(open("./Scrapy_Agent/config/" + self.name + ".json"))
Я буду беспокоиться о жестко заданной части пути позже, хотя файлы конфигурации основаны на имени паука.
Но у меня возникают проблемы с тем, что у меня есть конвейер, который хочет использовать поле фильтра из файла конфигурации.
У меня есть ItemLoader, который выглядит так
class ListingLoader(ItemLoader):
PostcodeName_out = OutputRegexProcessor("PostcodeName")
ID_out = OutputRegexProcessor("ID")
AddressName_out = OutputRegexProcessor("AddressName")
и выходной RegexProcessor init выглядит так
class OutputRegexProcessor(object):
def __init__(self, name):
settings = json.load(open("./Scrapy_Agent/config/realcommercialsale.json"))
self.regex = ""
for binding in settings["bindings"]:
if (binding["name"] == name):
if (binding.get("filter")):
self.regex = binding["filter"]
Имя паука - realcommercialsale, и в настоящее время это жестко запрограммировано здесь. Я немного новичок в питоне, и я застрял, пытаясь найти способ получить имя текущего паука до этой точки.
Я не привержен какому-либо конкретному решению проблемы. Мне нужно получить строку регулярного выражения для поля элемента вниз в OutputRegexProcessor. Получаю ли я доступ к имени паука и повторно анализирую файл json, как делаю в настоящее время, или как-то иначе передаю файл json, или какое-то другое решение, о котором я не знаю.