标签: scrapyd

蜘蛛内的Scrapyd jobid值

Framework Scrapy - Scrapyd服务器.

我在蜘蛛中获得jobid值有一些问题.

将数据发布到http:// localhost:6800/schedule.json后,响应为

status = ok
jobid = bc2096406b3011e1a2d0005056c00008
Run Code Online (Sandbox Code Playgroud)

但是我需要在进程中使用当前蜘蛛内部的这个jobid.它可用于open {jobid} .log文件或其他动态原因.

class SomeSpider(BaseSpider):
    name = "some"
    start_urls = ["http://www.example.com/"]
    def parse(self, response):
        items = []
        for val in values:
            item = SomeItem()
            item['jobid'] = self.jobid # ???!
            items.append(item)
        return items
Run Code Online (Sandbox Code Playgroud)

但是只有在完成任务后我才会看到这个工作:(谢谢!

python scrapy scrapyd

7
推荐指数
2
解决办法
1512
查看次数

使用scrapyd部署项目时出错

我的项目文件夹中有多个蜘蛛,想要一次运行所有的蜘蛛,所以我决定使用scrapyd服务运行它们.我已经开始这样做

首先,我在当前项目文件夹中

  1. 我打开了scrapy.cfg文件,然后取消注释了url行

    [部署]

  2. 我运行了scrapy server命令,运行良好,并且运行了scrapyd服务器

  3. 我试过这个命令 scrapy deploy -l

    结果: default http://localhost:6800/

  4. 当我尝试这个命令时,scrapy deploy -L scrapyd我得到了以下输出

结果:

Usage
=====
  scrapy deploy [options] [ [target] | -l | -L <target> ]

deploy: error: Unknown target: scrapyd
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此命令部署项目时scrapy deploy scrapyd -p default出现以下错误

Usage
=====
  scrapy deploy [options] [ [target] | -l | -L <target> ]

deploy: error: Unknown target: scrapyd
Run Code Online (Sandbox Code Playgroud)

我真的无法识别whey scrapyd是否显示上述错误,可以引导我以正确的方式将项目部署到scrapyd

提前致谢..........

编辑代码:

在看到Peter Kirby的答案之后,我在scrapy.cfg中命名了target并在我的项目文件夹中尝试了以下命令,

命令:

scrapy deploy ebsite …
Run Code Online (Sandbox Code Playgroud)

python scrapy scrapyd

7
推荐指数
1
解决办法
7036
查看次数

在后台/作为服务运行 Scrapyd 的首选方式

我正在尝试在我通过 SSH 连接的虚拟 Ubuntu 16.04 服务器上运行 Scrapyd。当我通过简单地运行来运行scrapy

$ scrapyd
Run Code Online (Sandbox Code Playgroud)

我可以通过访问http://82.165.102.18:6800连接到 Web 界面。

但是,一旦我关闭 SSH 连接,Web 界面就不再可用,因此,我认为我需要以某种方式在后台运行 Scrapyd 作为服务。

经过一番研究,我发现了一些建议的解决方案:

  • 守护进程(sudo apt install 守护进程)
  • 屏幕(sudo apt 安装屏幕)
  • tmux (sudo apt install tmux)

有人知道最好/推荐的解决方案是什么吗?不幸的是,Scrapyd 文档相当单薄且过时。

对于某些背景,我每天需要运行大约 10-15 个蜘蛛。

ubuntu scrapy scrapyd

7
推荐指数
1
解决办法
4626
查看次数

Scrapy的Scrapyd调度蜘蛛的速度太慢了

我正在运行Scrapyd并在同时启动4个蜘蛛时遇到一个奇怪的问题.

2012-02-06 15:27:17+0100 [HTTPChannel,0,127.0.0.1] 127.0.0.1 - - [06/Feb/2012:14:27:16 +0000] "POST /schedule.json HTTP/1.1" 200 62 "-" "python-requests/0.10.1"
2012-02-06 15:27:17+0100 [HTTPChannel,1,127.0.0.1] 127.0.0.1 - - [06/Feb/2012:14:27:16 +0000] "POST /schedule.json HTTP/1.1" 200 62 "-" "python-requests/0.10.1"
2012-02-06 15:27:17+0100 [HTTPChannel,2,127.0.0.1] 127.0.0.1 - - [06/Feb/2012:14:27:16 +0000] "POST /schedule.json HTTP/1.1" 200 62 "-" "python-requests/0.10.1"
2012-02-06 15:27:17+0100 [HTTPChannel,3,127.0.0.1] 127.0.0.1 - - [06/Feb/2012:14:27:16 +0000] "POST /schedule.json HTTP/1.1" 200 62 "-" "python-requests/0.10.1"
2012-02-06 15:27:18+0100 [Launcher] Process started: project='thz' spider='spider_1' job='abb6b62650ce11e19123c8bcc8cc6233' pid=2545 
2012-02-06 15:27:19+0100 [Launcher] Process finished: project='thz' spider='spider_1' job='abb6b62650ce11e19123c8bcc8cc6233' pid=2545 
2012-02-06 …
Run Code Online (Sandbox Code Playgroud)

python scrapy scrapyd

6
推荐指数
2
解决办法
3656
查看次数

构建我的python项目的一个鸡蛋

有人可以指导我如何打开我现有的python项目的一步一步的程序吗?文档一直在提到包中的setup.py,但我在项目中找不到它...

谢谢,

python egg scrapyd

6
推荐指数
2
解决办法
3480
查看次数

Scrapyd:一旦我使用scrapyd安排它,我在哪里可以看到我的爬虫的输出

我是scrapy和scrapyd的新手.做了一些阅读并开发了我的抓取工具,它抓取了一个新闻网站,并从中提供了所有新闻文章.如果我只是简单地运行爬虫

scrapy crawl project name -o something.txt
Run Code Online (Sandbox Code Playgroud)

它正确地为我提供了something.txt中的所有抓取数据.

现在我尝试使用scrapyd在localhost:6800上部署我的scrapy crawler项目.

我使用了爬行器

curl http://localhost:6800/schedule.json -d project=tutorial -d spider=dmoz_spider
Run Code Online (Sandbox Code Playgroud)

它在命令行上给了我这个

{"status": "ok", "jobid": "545dfcf092de11e3ad8b0013d43164b8"}
Run Code Online (Sandbox Code Playgroud)

这是我认为是正确的,我甚至能够看到我的cralwer作为localhost:6800的UI视图上的工作

但是我在哪里可以找到我以前在something.txt中收集的爬虫所抓取的数据.

请帮忙....

这是我的抓取代码

class DmozSpider(Spider):
    name = "dmoz"
    allowed_domains = ["timesofindia.com"]
    start_urls = ["http://mobiletoi.timesofindia.com/htmldbtoi/TOIPU/20140206/TOIPU_articles__20140206.html"]

    def parse(self, response):
    sel = Selector(response)
        torrent = DmozItem()
    items=[]
    links = sel.xpath('//div[@class="gapleftm"]/ul[@class="content"]/li')
        sel.xpath("//div[@class='gapleftm']/ul[@class='content']/li/b/a/stname/text()").extract()
    sel.xpath("//div[@class='gapleftm']/ul[@class='content']/li/b/a/@href").extract()

    for ti in sel.xpath("//a[@class='pda']/text()").extract():
        yield DmozItem(title=ti)
    for url in sel.xpath("//a[@class='pda']/@href").extract():
        itemLink = urlparse.urljoin(response.url, url)  
        yield DmozItem(link=url)    
        yield Request(itemLink, callback=self.my_parse)

    def my_parse(self, response):
    sel = Selector(response)
    self.log('A response from …
Run Code Online (Sandbox Code Playgroud)

curl scrapy scrapyd

6
推荐指数
1
解决办法
2340
查看次数

scrapyd:是否可以返回作业的ERROR状态

我有一个应用程序,通过scrapyd安排scrapy抓取工作.项目很好地流向数据库,我可以通过listjobs.json端点来查看作业状态.所以很好,我甚至可以知道作业何时完成.

但是,有时候工作会失败.可能是因为HTTP错误或凭据错误.我想访问已完成的作业状态,最好是来自scrapyd api.就像listjobs.json今天给我的东西一样,我希望得到的结果如下:

{"status": "ok",


"error": [{"id": "78391cc0fcaf11e1b0090800272a6d06", "spider": "spider1"}],
 "running": [{"id": "422e608f9f28cef127b3d5ef93fe9399", "spider": "spider2", "start_time": "2012-09-12 10:14:03.594664"}],
 "finished": [{"id": "2f16646cfcaf11e1b0090800272a6d06", "spider": "spider3", "start_time": "2012-09-12 10:14:03.594664", "end_time": "2012-09-12 10:24:03.594664"}]}
Run Code Online (Sandbox Code Playgroud)

当然,我可以让作业自己更新一些数据库或文件,我可以从应用程序检查,但我想知道是否有更清洁的方式.

python scrapy scrapyd

6
推荐指数
0
解决办法
216
查看次数

找不到scrapyd-client命令

我刚刚在virtualenv中安装了scrapyd-client(1.1.0),并成功运行命令'scrapyd-deploy',但是当我运行'scrapyd-client'时,终端说:找不到命令:scrapyd-client.

根据自述文件(https://github.com/scrapy/scrapyd-client),应该有一个'scrapyd-client'命令.

我检查了路径'/lib/python2.7/site-packages/scrapyd-client',只检查了文件夹中的'scrapyd-deploy'.

命令'scrapyd-client'暂时被删除了吗?

python web-crawler scrapy scrapyd

6
推荐指数
1
解决办法
2184
查看次数

Scrapy如何使用Loader忽略带有空白字段的项目

我想知道如何忽略不填充所有字段的项目,某种丢弃,因为在scrapyd的输出中我得到的页面没有填满所有字段.

我有那个代码:

class Product(scrapy.Item):
    source_url = scrapy.Field(
        output_processor = TakeFirst()
    )
    name = scrapy.Field(
        input_processor = MapCompose(remove_entities),
        output_processor = TakeFirst()
    )
    initial_price = scrapy.Field(
        input_processor = MapCompose(remove_entities, clear_price),
        output_processor = TakeFirst()
    )
    main_image_url = scrapy.Field(
        output_processor = TakeFirst()
    )
Run Code Online (Sandbox Code Playgroud)

分析器:

def parse_page(self, response):
    try:
        l = ItemLoader(item=Product(), response=response)
        l.add_value('source_url', response.url)
        l.add_css('name', 'h1.title-product::text')
        l.add_css('main_image_url', 'div.pics a img.zoom::attr(src)')

        l.add_css('initial_price', 'ul.precos li.preco_normal::text')
        l.add_css('initial_price', 'ul.promocao li.preco_promocao::text')

        return l.load_item()

    except Exception as e:
        print self.log("#1 ERRO: %s" % e), response.url
Run Code Online (Sandbox Code Playgroud)

我想用Loader做它而不需要用我自己的Selector创建(避免两次处理项目).我想我可以将它们放到管道中,但可能不是最好的方法,因为这些项目无效.

python scrapy scrapyd

5
推荐指数
1
解决办法
1905
查看次数

在使用 Channels 实现 WebSockets 后,Scrapy 蜘蛛无法在 Django 上工作(无法从异步上下文中调用它)

我正在提出一个新问题,因为我在 Django 应用程序中遇到了 Scrapy 和 Channels 的问题,如果有人能够指导我正确的方向,我将不胜感激。

我使用通道的原因是因为我想从 Scrapyd API 实时检索抓取状态,而不必一直使用 setIntervals,因为这应该成为一个 SaaS 服务,可能会被许多人使用用户。

如果我运行的话,我已经正确实现了通道:

python manage.py runserver
Run Code Online (Sandbox Code Playgroud)

我可以正确地看到系统现在正在使用 ASGI:

System check identified no issues (0 silenced).
September 01, 2020 - 15:12:33
Django version 3.0.7, using settings 'seotoolkit.settings'
Starting ASGI/Channels version 2.4.0 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Run Code Online (Sandbox Code Playgroud)

此外,客户端和服务器通过 WebSocket 正确连接:

WebSocket HANDSHAKING /crawler/22/ [127.0.0.1:50264]
connected {'type': 'websocket.connect'}
WebSocket CONNECT /crawler/22/ [127.0.0.1:50264]
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,当我通过 Scrapyd-API 运行 scrapy 时出现问题

2020-09-01 15:31:25 [scrapy.core.scraper] ERROR: Error processing {'url': 'https://www.example.com'}
raceback (most …
Run Code Online (Sandbox Code Playgroud)

django websocket scrapy scrapyd django-channels

5
推荐指数
1
解决办法
488
查看次数

标签 统计

scrapyd ×10

scrapy ×9

python ×7

curl ×1

django ×1

django-channels ×1

egg ×1

ubuntu ×1

web-crawler ×1

websocket ×1