首页 > 解决方案 > 如何让我的scrapy读取同一目录中的文件?

问题描述

目标文件urls.txt包含要下载的所有 url。

├─spiders
│  │  stockInfo.py
│  │  urls.txt
│  │  __init__.py

stockInfo.py是我的scrapy文件。

import scrapy
import os
import re

class QuotesSpider(scrapy.Spider):
    name = "stockInfo"
    projectFile = r"d:/toturial/toturial/spiders/urls.txt"
    with open(projectFile,"r") as f:
        urls = f.readlines()
    start_urls = [url.strip() for url in urls]

    def parse(self, response):
        pass

我已经测试了上面stockInfo.py可以在我的本地电脑端成功运行命令:

scrapy crawl  stockInfo

现在我将项目部署到远程scrapy hub

pip install shub
shub login
API key: xxxxxxxxxxxxxxxxx
shub deploy 380020

它遇到了麻烦:

IOError: [Errno 2] No such file or directory: 'd:/toturial/toturial/spiders/urls.txt'

如何解决它何时将我的部署scrapyhub?重写是有用的

projectFile = r"d:/toturial/toturial/spiders/urls.txt"

作为

projectFile = "./urls.txt"

什么时候在我的本地电脑端运行它。

奇怪的是,重写是没有用的

projectFile = r"d:/toturial/toturial/spiders/urls.txt"

作为

projectFile = "./urls.txt"

何时在远程端运行它scrapy hub

标签: pythonscrapy

解决方案


1.添加新目录并移入urls.txt其中。
添加一个新目录resources,并保存urls.txt在其中。
我的新目录树如下。

tutorial
├─tutorial
│  ├─resources
|     |--urls.txt
│  ├─spiders
|     |--stockInfo.py

2.重写 setup.py 如下。

from setuptools import setup, find_packages

setup(
    name='tutorial',
    version='1.0',
    packages=find_packages(),
    package_data={
        'tutorial': ['resources/*.txt']
    },
    entry_points={
        'scrapy': ['settings = tutorial.settings']
    },
    zip_safe=False,
)

3.改写stockInfo.py如下。

import scrapy
import os 
import re
import pkgutil
class QuotesSpider(scrapy.Spider):
    name = "stockInfo"
    data = pkgutil.get_data("tutorial", "resources/urls.txt")
    data = data.decode()
    start_urls = data.split("\r\n")

    def parse(self, response):
        pass

推荐阅读