Изменить путь к файлам при запуске скрипта / Scrapy - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть несколько пауков, которые я запускаю из скрипта core.py, например:

# ----- This part launch all given spiders ----- #

process = CrawlerProcess(get_project_settings())

process.crawl(CarrefourSpider)
process.crawl(ParapharmaSpider)
process.crawl(EbaySpider)

process.start() # the script will block here until the crawling is finished

Однако каждый паук ссылается на файл: он не работал без указания абсолютного пути, поэтому сейчас он выглядит так:

class CarrefourSpider(scrapy.Spider):
name = "carrefour_bot"

def start_requests(self):
    base_url="https://new.carrefour.fr/s?q="
    test_file = open(r"C:\Users\User\scrapybot\scrapybot\spiders\files\to_collect_carrefour.csv", "r")
    reader = csv.reader(test_file)
    for row in reader:
        if row:
            url = row[0]
            absolute_url = base_url+url
            print(absolute_url)
            yield scrapy.Request(absolute_url, meta={'dont_redirect': True, "handle_httpstatus_list": [302, 301, 502]}, callback=self.parse)

Дело в том, что я не буду единственным человеком, использующим этот сценарий. Я хотел бы знать, есть ли способ указать путь перед запуском сценария core.py вместо изменения пути в каждом сценарии. Или просто идеи, чтобы сделать его более гибким:]

Пожалуйста, дайте мне знать, если мне не ясно! Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Более элегантный способ - использовать настройки скрапа:

class CarrefourSpider(scrapy.Spider):
name = "carrefour_bot"

def start_requests(self):
    base_url="https://new.carrefour.fr/s?q="
    test_file = open(self.settings["URL_FILE_LOCATION"], "r")
    reader = csv.reader(test_file)
    for row in reader:
        if row:
            url = row[0]
            absolute_url = base_url+url
            print(absolute_url)
            yield scrapy.Request(absolute_url, meta={'dont_redirect': True, "handle_httpstatus_list": [302, 301, 502]}, callback=self.parse)

Теперь каждый пользователь может настроить значение URL_FILE_LOCATION в своих локальных настройках.

0 голосов
/ 16 ноября 2018
from os import path

script_dir = os.path.dirname(__file__)
file_path = os.path.join(script_dir, './output03.txt')
print(file_path)
fptr = open(file_path, 'w')

Таким образом будет выбран каталог, в котором находится сценарий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...