URL 部署到 Scraping Hub 和蜘蛛时找不到文本文件 运行
URL text file not found when deployed to Scraping Hub and spider run
问题
我的蜘蛛依赖于一个 .txt
文件,其中包含蜘蛛要去的 URLs。我将该文件放在蜘蛛代码所在的同一目录中,并放在它之前的每个目录中(Hail Marry 方法);最终结果是这样的:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/scrapy/core/engine.py", line 127, in _next_request
request = next(slot.start_requests)
File "/app/__main__.egg/CCSpider1/spiders/cc_1_spider.py", line 41, in start_requests
for line in fileinput.input({url_file}):
File "/usr/local/lib/python2.7/fileinput.py", line 237, in next
line = self._readline()
File "/usr/local/lib/python2.7/fileinput.py", line 339, in _readline
self._file = open(self._filename, self._mode)
IOError: [Errno 2] No such file or directory: 'url_list_20171028Z.txt'
问题
如何确保在我 运行 我的蜘蛛时总能找到 url_list_20171028Z.txt
?此 URL 文本文件每天更新(新的文件会在第二天标记 -- e.x:url_list_20171029Z.txt
,等等)。
背景
感谢您解决我的问题。我是 Python 的新手(2017 年 6 月开始学习),我把这个抓取项目当作乐趣和学习经验。我最近才开始使用 scrapy(2017 年 10 月),所以对于我脑海中闪过的任何明显的简单性,我深表歉意。
此项目已上传到 Scraping Hub 网站。当我尝试从 Scraping Hub 仪表板 运行 我的蜘蛛时,这个问题会弹出。 spider部署成功,我做了一个requirements.txt
文件来下载我的spider中使用的Pandas
包。
我的代码
下面的代码是调用 URL 文本文件的地方。我重新设计了新项目启动时启动的默认蜘蛛。当我 运行 我自己电脑上的蜘蛛时;它按需要运行。这是调用“url_list_20171028Z.txt”文件以获取 URLs 以从以下位置获取数据的代码部分:
def start_requests(self):
s_time = strftime("%Y%m%d" ,gmtime())
url_file = 'url_list_{0}Z.txt'.format(s_time)
for line in fileinput.input({url_file}):
url = str.strip(line)
yield scrapy.Request(url=url, callback=self.parse)
非常感谢您花时间帮助我解决这个问题。如果您需要我添加更多信息,请告诉我!谢谢!
您需要在 setup.py
文件的 package_data 部分声明文件。
例如,如果你的Scrapy项目有以下结构:
myproject/
__init__.py
settings.py
resources/
cities.txt
scrapy.cfg
setup.py
您可以在 setup.py
中使用以下内容来包含 cities.txt
文件:
setup(
name='myproject',
version='1.0',
packages=find_packages(),
package_data={
'myproject': ['resources/*.txt']
},
entry_points={
'scrapy': ['settings = myproject.settings']
},
zip_safe=False,
)
请注意,zip_safe
标志设置为 False ,因为在某些情况下可能需要这样做。
现在您可以像这样从 setting.py
访问 cities.txt
文件内容:
import pkgutil
data = pkgutil.get_data("myproject", "resources/cities.txt")
问题
我的蜘蛛依赖于一个 .txt
文件,其中包含蜘蛛要去的 URLs。我将该文件放在蜘蛛代码所在的同一目录中,并放在它之前的每个目录中(Hail Marry 方法);最终结果是这样的:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/scrapy/core/engine.py", line 127, in _next_request
request = next(slot.start_requests)
File "/app/__main__.egg/CCSpider1/spiders/cc_1_spider.py", line 41, in start_requests
for line in fileinput.input({url_file}):
File "/usr/local/lib/python2.7/fileinput.py", line 237, in next
line = self._readline()
File "/usr/local/lib/python2.7/fileinput.py", line 339, in _readline
self._file = open(self._filename, self._mode)
IOError: [Errno 2] No such file or directory: 'url_list_20171028Z.txt'
问题
如何确保在我 运行 我的蜘蛛时总能找到 url_list_20171028Z.txt
?此 URL 文本文件每天更新(新的文件会在第二天标记 -- e.x:url_list_20171029Z.txt
,等等)。
背景
感谢您解决我的问题。我是 Python 的新手(2017 年 6 月开始学习),我把这个抓取项目当作乐趣和学习经验。我最近才开始使用 scrapy(2017 年 10 月),所以对于我脑海中闪过的任何明显的简单性,我深表歉意。
此项目已上传到 Scraping Hub 网站。当我尝试从 Scraping Hub 仪表板 运行 我的蜘蛛时,这个问题会弹出。 spider部署成功,我做了一个requirements.txt
文件来下载我的spider中使用的Pandas
包。
我的代码
下面的代码是调用 URL 文本文件的地方。我重新设计了新项目启动时启动的默认蜘蛛。当我 运行 我自己电脑上的蜘蛛时;它按需要运行。这是调用“url_list_20171028Z.txt”文件以获取 URLs 以从以下位置获取数据的代码部分:
def start_requests(self):
s_time = strftime("%Y%m%d" ,gmtime())
url_file = 'url_list_{0}Z.txt'.format(s_time)
for line in fileinput.input({url_file}):
url = str.strip(line)
yield scrapy.Request(url=url, callback=self.parse)
非常感谢您花时间帮助我解决这个问题。如果您需要我添加更多信息,请告诉我!谢谢!
您需要在 setup.py
文件的 package_data 部分声明文件。
例如,如果你的Scrapy项目有以下结构:
myproject/
__init__.py
settings.py
resources/
cities.txt
scrapy.cfg
setup.py
您可以在 setup.py
中使用以下内容来包含 cities.txt
文件:
setup(
name='myproject',
version='1.0',
packages=find_packages(),
package_data={
'myproject': ['resources/*.txt']
},
entry_points={
'scrapy': ['settings = myproject.settings']
},
zip_safe=False,
)
请注意,zip_safe
标志设置为 False ,因为在某些情况下可能需要这样做。
现在您可以像这样从 setting.py
访问 cities.txt
文件内容:
import pkgutil
data = pkgutil.get_data("myproject", "resources/cities.txt")