启动脚本/ Scrapy

时间:2018-11-16 11:54:02

标签: python scrapy

我有几个从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 :(得分:0)

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

这样,将在脚本所在的位置选择目录

答案 1 :(得分:0)

一种更优雅的方法是利用草率设置:

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的值。