我的蜘蛛依赖于.txt
文件,其中包含蜘蛛进入的网址。我已将该文件放在蜘蛛代码所在的同一目录中,并放在它之前的每个目录中(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仪表板运行我的蜘蛛时,会出现这个问题。蜘蛛的部署成功了,我制作了一个requirements.txt
文件来下载我蜘蛛中使用的Pandas
包。
以下代码是调用URL文本文件的位置。我重新设计了一个新项目启动时启动的默认蜘蛛。当我在自己的电脑上运行蜘蛛时;它按照需要运作。这是调用`url_list_20171028Z.txt'的代码部分。文件以获取从以下位置获取数据的URL:
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)
非常感谢你花时间帮我解决这个问题。如果您需要我添加更多信息,请告诉我们!谢谢!
答案 0 :(得分:2)
您需要在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,因为在某些情况下可能需要这样做。
现在,您可以像cities.txt
这样访问setting.py
文件内容:
import pkgutil
data = pkgutil.get_data("myproject", "resources/cities.txt")