PythonAnywhere.com 未启用 Scrapy 项目管道
Scrapy Item Pipelines not enabled on PythonAnywhere.com
我在 PythonAnywhere.com (PA) 上部署了一个 scrappy/flask 项目,它在我的本地机器上运行并且几乎完全在 PA 上运行。我遇到的问题是,当我将任务安排到 运行 我的蜘蛛时,没有启用任何管道。这显然是一个问题,因为我的 MongoDB 和图像管道不会更新。关于我为什么遇到这个问题以及如何解决它的任何想法?我能够查询 MongoDB 并且我的网站按预期呈现,只是在抓取过程中没有启用任何管道,所以我留下了一个过时的网站。经过仔细检查,爬虫似乎使用了不正确的机器人。请参阅以下输出;第一个来自我的本地机器,第二个来自 PA:
正确 - 我的本地机器:
2019-03-16 15:51:12 [scrapy.utils.log] INFO: Scrapy 1.6.0 started (bot: mycorrectbot)
2019-03-16 15:51:12 [scrapy.utils.log] INFO: Versions: lxml 4.3.2.0, libxml2 2.9.9, cssselect 1.0.3, parsel 1.5.1, w3lib 1.20.0, Twisted 18.9.0, Python 3.7.1 (default, Nov 28 2018, 11:51:47) - [Clang 10.0.0 (clang-1000.11.45.5)], pyOpenSSL 19.0.0 (OpenSSL 1.1.1b 26 Feb 2019), cryptography 2.6.1, Platform Darwin-18.2.0-x86_64-i386-64bit
2019-03-16 15:51:12 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'mycorrectbot', 'DOWNLOAD_DELAY': 0.25, 'NEWSPIDER_MODULE': 'mine.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['mine.spiders'], 'USER_AGENT': 'mine (+https://mine.com)'}
不正确 - 在 PA 上:
2019-03-16 22:57:11 [scrapy.utils.log] INFO: Scrapy 1.6.0 started (bot: scrapybot)
2019-03-16 22:57:11 [scrapy.utils.log] INFO: Versions: lxml 4.3.2.0, libxml2 2.9.9, cssselect 1.0.3, parsel 1.5.1, w3lib 1.20.0, Twisted 18.9.0, Python 3.7.0 (default, Aug 22 2018, 20:50:05) - [GCC 5.4.0 20160609], pyOpenSSL 19.0.0 (OpenSSL 1.1.1b 26 Feb 2019), cryptography 2.6.1, Platform Linux-4.4.0-1075-aws-x86_64-with-debian-stretch-sid
2019-03-16 22:57:11 [scrapy.crawler] INFO: Overridden settings: {}
项目结构:
├── LICENSE
├── README.md
├── flask_app
│ ├── __init__.py
│ ├── flask_app.py
│ ├── static
│ │ ├── css
│ │ │ └── home.css
│ │ ├── images
│ │ │ └── full
│ │ │ ├── 1.jpg
│ │ │ ├── 2.jpg
│ │ │ ├── 3.jpg
│ │ └── vendor
│ │ ├── bootstrap
│ │ │ ├── css
│ │ │ │ ├── bootstrap.css
│ │ │ │ ├── bootstrap.css.map
│ │ │ │ ├── bootstrap.min.css
│ │ │ │ └── bootstrap.min.css.map
│ │ │ └── js
│ │ │ ├── bootstrap.bundle.js
│ │ │ ├── bootstrap.bundle.js.map
│ │ │ ├── bootstrap.bundle.min.js
│ │ │ ├── bootstrap.bundle.min.js.map
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.js.map
│ │ │ ├── bootstrap.min.js
│ │ │ └── bootstrap.min.js.map
│ │ └── jquery
│ │ ├── jquery.js
│ │ ├── jquery.min.js
│ │ ├── jquery.min.map
│ │ ├── jquery.slim.js
│ │ ├── jquery.slim.min.js
│ │ └── jquery.slim.min.map
│ └── templates
│ └── index.html
├── scrapy_app
│ ├── scrapy_app
│ │ ├── __init__.py
│ │ ├── items.py
│ │ ├── middlewares.py
│ │ ├── pipelines.py
│ │ ├── settings.py
│ │ └── spiders
│ │ ├── __init__.py
│ │ └── mine.py
│ └── scrapy.cfg
└── requirements.txt
据我了解,我无法直接在 PA 任务中为我的 scrapy 蜘蛛调用 .py,而必须依赖单独的文件来进行我通常会进行的 "scrapy crawl my spider" 调用。但是,这似乎没有按预期工作。我引用了这个 doc page 但我一定遗漏了一些东西。
这是我创建的用于在 PA 任务中进行备用调用和指向的文件:
import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from scrapy_app.spiders import mine
class MySpider('my spider'):
# Your spider definition
pass
if __name__ == "__main__":
process = CrawlerProcess(get_project_settings())
process.crawl(mine.MySpider)
process.start() # the script will block here until the crawling is finished
以下是我在PA上添加的定时任务(不在项目结构中-请无视此事实):
/home/myuserid/.virtualenvs/myvirtualenv/bin/python /home/myuserid/flask_app/flask_app/scheduler.py
在此先感谢您的帮助!
哇。我使这比我需要的复杂得多。我的 PA 和本地应用程序之间的唯一差异是我使用的虚拟环境类型 运行ning。我删除了 PA 上推荐的 VE,而是使用了 venv。然后我写了一个简单的脚本来激活 VE,运行 我的蜘蛛,然后停用。脚本如下(scheduler.sh):
#!/bin/bash
cd ~
source myvenv/bin/activate
cd /home/userid/project/scrapy_app/scrapy_app
scrapy crawl my spider
deactivate
尽管 PA 和 scrapy 的指导都很糟糕,但现在一切都按预期进行。希望这对其他人有帮助!
我在 PythonAnywhere.com (PA) 上部署了一个 scrappy/flask 项目,它在我的本地机器上运行并且几乎完全在 PA 上运行。我遇到的问题是,当我将任务安排到 运行 我的蜘蛛时,没有启用任何管道。这显然是一个问题,因为我的 MongoDB 和图像管道不会更新。关于我为什么遇到这个问题以及如何解决它的任何想法?我能够查询 MongoDB 并且我的网站按预期呈现,只是在抓取过程中没有启用任何管道,所以我留下了一个过时的网站。经过仔细检查,爬虫似乎使用了不正确的机器人。请参阅以下输出;第一个来自我的本地机器,第二个来自 PA:
正确 - 我的本地机器:
2019-03-16 15:51:12 [scrapy.utils.log] INFO: Scrapy 1.6.0 started (bot: mycorrectbot)
2019-03-16 15:51:12 [scrapy.utils.log] INFO: Versions: lxml 4.3.2.0, libxml2 2.9.9, cssselect 1.0.3, parsel 1.5.1, w3lib 1.20.0, Twisted 18.9.0, Python 3.7.1 (default, Nov 28 2018, 11:51:47) - [Clang 10.0.0 (clang-1000.11.45.5)], pyOpenSSL 19.0.0 (OpenSSL 1.1.1b 26 Feb 2019), cryptography 2.6.1, Platform Darwin-18.2.0-x86_64-i386-64bit
2019-03-16 15:51:12 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'mycorrectbot', 'DOWNLOAD_DELAY': 0.25, 'NEWSPIDER_MODULE': 'mine.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['mine.spiders'], 'USER_AGENT': 'mine (+https://mine.com)'}
不正确 - 在 PA 上:
2019-03-16 22:57:11 [scrapy.utils.log] INFO: Scrapy 1.6.0 started (bot: scrapybot)
2019-03-16 22:57:11 [scrapy.utils.log] INFO: Versions: lxml 4.3.2.0, libxml2 2.9.9, cssselect 1.0.3, parsel 1.5.1, w3lib 1.20.0, Twisted 18.9.0, Python 3.7.0 (default, Aug 22 2018, 20:50:05) - [GCC 5.4.0 20160609], pyOpenSSL 19.0.0 (OpenSSL 1.1.1b 26 Feb 2019), cryptography 2.6.1, Platform Linux-4.4.0-1075-aws-x86_64-with-debian-stretch-sid
2019-03-16 22:57:11 [scrapy.crawler] INFO: Overridden settings: {}
项目结构:
├── LICENSE
├── README.md
├── flask_app
│ ├── __init__.py
│ ├── flask_app.py
│ ├── static
│ │ ├── css
│ │ │ └── home.css
│ │ ├── images
│ │ │ └── full
│ │ │ ├── 1.jpg
│ │ │ ├── 2.jpg
│ │ │ ├── 3.jpg
│ │ └── vendor
│ │ ├── bootstrap
│ │ │ ├── css
│ │ │ │ ├── bootstrap.css
│ │ │ │ ├── bootstrap.css.map
│ │ │ │ ├── bootstrap.min.css
│ │ │ │ └── bootstrap.min.css.map
│ │ │ └── js
│ │ │ ├── bootstrap.bundle.js
│ │ │ ├── bootstrap.bundle.js.map
│ │ │ ├── bootstrap.bundle.min.js
│ │ │ ├── bootstrap.bundle.min.js.map
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.js.map
│ │ │ ├── bootstrap.min.js
│ │ │ └── bootstrap.min.js.map
│ │ └── jquery
│ │ ├── jquery.js
│ │ ├── jquery.min.js
│ │ ├── jquery.min.map
│ │ ├── jquery.slim.js
│ │ ├── jquery.slim.min.js
│ │ └── jquery.slim.min.map
│ └── templates
│ └── index.html
├── scrapy_app
│ ├── scrapy_app
│ │ ├── __init__.py
│ │ ├── items.py
│ │ ├── middlewares.py
│ │ ├── pipelines.py
│ │ ├── settings.py
│ │ └── spiders
│ │ ├── __init__.py
│ │ └── mine.py
│ └── scrapy.cfg
└── requirements.txt
据我了解,我无法直接在 PA 任务中为我的 scrapy 蜘蛛调用 .py,而必须依赖单独的文件来进行我通常会进行的 "scrapy crawl my spider" 调用。但是,这似乎没有按预期工作。我引用了这个 doc page 但我一定遗漏了一些东西。
这是我创建的用于在 PA 任务中进行备用调用和指向的文件:
import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from scrapy_app.spiders import mine
class MySpider('my spider'):
# Your spider definition
pass
if __name__ == "__main__":
process = CrawlerProcess(get_project_settings())
process.crawl(mine.MySpider)
process.start() # the script will block here until the crawling is finished
以下是我在PA上添加的定时任务(不在项目结构中-请无视此事实):
/home/myuserid/.virtualenvs/myvirtualenv/bin/python /home/myuserid/flask_app/flask_app/scheduler.py
在此先感谢您的帮助!
哇。我使这比我需要的复杂得多。我的 PA 和本地应用程序之间的唯一差异是我使用的虚拟环境类型 运行ning。我删除了 PA 上推荐的 VE,而是使用了 venv。然后我写了一个简单的脚本来激活 VE,运行 我的蜘蛛,然后停用。脚本如下(scheduler.sh):
#!/bin/bash
cd ~
source myvenv/bin/activate
cd /home/userid/project/scrapy_app/scrapy_app
scrapy crawl my spider
deactivate
尽管 PA 和 scrapy 的指导都很糟糕,但现在一切都按预期进行。希望这对其他人有帮助!