python - 如何让我的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'
如何解决它何时将我的部署scrapy
到hub
?重写是有用的
projectFile = r"d:/toturial/toturial/spiders/urls.txt"
作为
projectFile = "./urls.txt"
什么时候在我的本地电脑端运行它。
奇怪的是,重写是没有用的
projectFile = r"d:/toturial/toturial/spiders/urls.txt"
作为
projectFile = "./urls.txt"
何时在远程端运行它scrapy hub
。
解决方案
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
推荐阅读
- php - 无法从 gmail smtp 发送邮件
- sql-server - 从已连接的 2 个表中获取数据
- python - 我的 python 程序不会在终端中执行或显示任何内容
- r - 结合使用谓词函数整齐替换缺失值
- flutter - 如何将动画值传递给子小部件
- javascript - 如果存在其他类,则隐藏元素
- java - 无法使用 Android WebView 上传文件
- python - Flask:函数未返回任何字符串并获得内部服务器错误 500
- assembly - 是否可以对数组中的每 3 个相邻元素求和,并使用向量指令使它们中的每一个都等于总和?
- c - C:当我想打开和写入文件时,如何解决“分段错误”?