如何使我的scrapy读取同一目录中的文件?

时间:2019-03-16 09:21:35

标签: python scrapy

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

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

stockInfo.py是我的抓取文件。

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可以在本地pc端使用以下命令成功运行:

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'

scrapy部署到hub时如何解决? 重写

  

projectFile = r“ d:/toturial/toturial/spiders/urls.txt”

  

projectFile =“ ./urls.txt”

何时在我的本地PC端运行它。

奇怪的是,没有必要重写

  

projectFile = r“ d:/toturial/toturial/spiders/urls.txt”

  

projectFile =“ ./urls.txt”

何时在远端scrapy hub中运行它。

1 个答案:

答案 0 :(得分:0)

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