- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我已经使用 scrapy 编写了一个工作爬虫,
现在我想通过一个Django webapp来控制它,也就是说:
start_urls
allowed_domains
设置
值一开始我以为scrapyd是为此而制作的,但在阅读了文档之后,它似乎更像是一个能够管理“打包蜘蛛”的守护进程,又名“抓取鸡蛋”;并且所有设置(start_urls
、allowed_domains
、settings
)仍然必须在“scrapy egg”本身中硬编码;所以它看起来不像是我的问题的解决方案,除非我错过了什么。
我也看过这个问题:How to give URL to scrapy for crawling? ;但是提供多个 url 的最佳答案被作者 himeslf 限定为“丑陋的 hack”,涉及一些 python 子进程和复杂的 shell 处理,所以我认为在这里找不到解决方案。此外,它可能适用于 start_urls
,但它似乎不允许 allowed_domains
或 settings
。
然后我看了一下scrapy webservices :这似乎是检索统计数据的好方法。但是,它仍然需要一个正在运行的蜘蛛,并且没有更改 settings
关于这个主题有几个问题,似乎没有一个是令人满意的:
我知道scrapy用于生产环境;而像scrapyd这样的工具表明确实有一些方法可以处理这些要求(我无法想象scrapyd处理的scrapy鸡蛋是手工生成的!)
非常感谢您的帮助。
最佳答案
At first I thought scrapyd was made for this, but after reading the doc, it seems that it's more a daemon able to manage 'packaged spiders', aka 'scrapy eggs'; and that all the settings (start_urls , allowed_domains, settings ) must still be hardcoded in the 'scrapy egg' itself ; so it doesn't look like a solution to my question, unless I missed something.
我不同意上面的说法,start_urls不需要硬编码它们可以动态传递给类,你应该可以像这样将它作为参数传递
http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
或者您应该能够从数据库或文件中检索 URL。我从这样的数据库中获取它
class WikipediaSpider(BaseSpider):
name = 'wikipedia'
allowed_domains = ['wikipedia.com']
start_urls = []
def __init__(self, name=None, url=None, **kwargs):
item = MovieItem()
item['spider'] = self.name
# You can pass a specific url to retrieve
if url:
if name is not None:
self.name = name
elif not getattr(self, 'name', None):
raise ValueError("%s must have a name" % type(self).__name__)
self.__dict__.update(kwargs)
self.start_urls = [url]
else:
# If there is no specific URL get it from Database
wikiliks = # < -- CODE TO RETRIEVE THE LINKS FROM DB -->
if wikiliks == None:
print "**************************************"
print "No Links to Query"
print "**************************************"
return None
for link in wikiliks:
# SOME PROCESSING ON THE LINK GOES HERE
self.start_urls.append(urllib.unquote_plus(link[0]))
def parse(self, response):
hxs = HtmlXPathSelector(response)
# Remaining parse code goes here
关于python - 如何以编程方式设置和启动 Scrapy 蜘蛛(网址和设置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12996910/
我正在通过 NodeSchool.io 练习学习 React 和 Express 框架。 我想将所有练习文件存储在具有多个页面的单个应用程序中,例如 索引 索引2 索引3 索引4 .... local
从这里:http://developer.android.com/reference/android/os/AsyncTask.html doInBackground(URL... urls) onP
我最近收到了一封电子邮件,其中包含以下内容(请勿点击!): UNS 这是原始电子邮件的链接:https://gist.github.com/anonymous/16963a230cab0a3a1bc
在 android 中,可以单击带有 URL 的 TextView 以在网络中打开 URL,方法是: android:autoLink="web" 我想做的是捕获这次点击,如果这个 TextView
我在我的网站上以 mysite.anotherdomain.org 的形式实现 Facebook 登录。我在 JavaScript SDK 的文档中做了所有解释,但由于我遇到了一些问题,我想知道错误是
我在 window.location.href 中有响应网址,我需要其中的 error、error_description 和 state 的值 http://localhost:4200/#erro
我正在创建无限加载,意味着当用户到达页面底部/特定 div 时会加载新页面。目前我有这个代码可以在点击时加载新页面。 $("#about").click(function(){ // load
当我们在谷歌引擎中搜索时,它也会显示热门网站标签或链接。就像我们搜索“bing”或“net beans”时一样。 问:它如何显示这些链接。我们是否必须告诉它显示这些链接。 问:它是否与 sitemap
我想从我的网址中获取我的产品。例如: http://www.website.com/product-category/iphone 我想获取 iphone,这对我的代码来说没问题,但我有一个下拉菜单来
我对 Pythonanywhere 完全陌生,我不知道为什么静态文件没有加载...这是我存储 css 和图像的路径,即 static/images/wikiLang.png 等 /static/adm
我正在使用这个正则表达式来验证 youtube 网址。 ^http:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=\w+)(?:\S+)?$ 它很好用。 但我有这个
我刚刚在 gist.github 上传了一个我正在处理的小编码项目,因为它似乎是一次上传几个类的好方法。 我想将某人与我的“要点”联系起来,并在角落里写着: Public Clone URL: git
我正在使用 jQuery 验证引擎来解析我的表单数据: https://github.com/posabsolute/jQuery-Validation-Engine 验证 Twitter URL 的
我有一个 Django 应用程序,它可以在 localhost 上正常工作。即使对于 utf-8 URL 路径也是如此。但是当我在生产中使用它时,它给了我一个错误: 2019-09-01 14:32:
我已经安装了Laravel并开始尝试编写一个应用程序。我在/ app所在的目录中为 Assets 创建了一些目录。但是,当我尝试访问本地主机中的图像时,例如:http://localhost/asse
我们正在寻找一种方法来检查一长串 YouTube 网址,以查找目前私有(private)、已删除或不再可用的视频。我们可以检查状态,但即使视频不再公开可用,URL 也会返回 200。例如这两个: ht
我在 YouTube 上有现场事件,我想在我的网站上播放它。我想将我的事件设为私有(private),获取它的 RTMP 广播 URL 并将其粘贴到我的网站上,在 JWPlayer 中。 那可能吗?
当我在谷歌上搜索我的域时,它会显示我网站上的几个 https 网址,因为谷歌喜欢 https,但出于特殊原因我不想索引 https/ssl 版本。 如何避免这种情况,全世界都只通过 htaccess
我想获取在 Salesforce.com 授权期间作为回调收到的当前 URL。 url 中的数据位于片段部分。 最佳答案 您可以使用 $_SERVER['HTTP_HOST'] 和 $_SERVER[
我正在使用 ionic 创建一个应用程序,其中我使用 iframe 显示 URL。 这是 HTML 代码: 这是 Angular js: $scope.iframeHeight = windo
我是一名优秀的程序员,十分优秀!