我有几个从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脚本之前指定路径,而不是在每个脚本中修改路径。或者只是使它更加灵活的想法:]
如果不清楚,请通知我!谢谢您的帮助
答案 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
的值。