小编arn*_*rno的帖子

如何以编程方式设置和启动Scrapy spider(网址和设置)

我已经使用scrapy编写了一个正在运行的爬虫,
现在我想通过Django webapp来控制它,也就是说:

  • 设置1或几个 start_urls
  • 设置1或几个 allowed_domains
  • 设定settings
  • 启动蜘蛛
  • 停止/暂停/恢复蜘蛛
  • 运行时检索一些统计数据
  • 在蜘蛛完成后检索一些统计数据.

起初我认为scrapyd为此而制作的,但在阅读了文档之后,似乎它更像是一个能够管理"打包蜘蛛"的守护进程,也就是"scrapy eggs"; 并且所有的设置(start_urls,allowed_domains,settings)仍必须在"scrapy鸡蛋"本身硬编码; 所以它看起来不像我的问题的解决方案,除非我错过了什么.

我还看了这个问题:如何为scrapy提供URL以进行爬行?; 但提供多个网址的最佳答案是由作者himeslf认定为"丑陋的黑客",涉及一些python子进程和复杂的shell处理,所以我认为这里找不到解决方案.此外,它可能适用start_urls,但它似乎不允许allowed_domainssettings.

然后我看了scrapy webservices:它似乎是检索统计数据的好方法.但是,它仍然需要一个正在运行的蜘蛛,并且没有改变的线索settings

关于这个问题有几个问题,似乎没有一个问题令人满意:

我知道scrapy用于生产环境; 像scrapyd这样的工具表明,确实有一些方法可以满足这些要求(我无法想象用于处理的scrapy egg scrap是手工生成的!)

非常感谢你的帮助.

python scrapy scrapyd

25
推荐指数
3
解决办法
6167
查看次数

为什么我的Scrapy CrawlSpider规则不起作用?

我已经设法使用Scrapy编写一个非常简单的爬虫程序,具有以下约束条件:

  • 存储所有链接信息(例如:锚文本,页面标题),因此存在2个回调
  • 使用CrawlSpider来利用规则,因此没有BaseSpider

它运行良好,除非我在第一个请求中添加回调时没有实现规则!

这是我的代码:(工作但不正确,有一个实例)

from scrapy.contrib.spiders import CrawlSpider,Rule
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
from scrapySpider.items import SPage
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor

class TestSpider4(CrawlSpider):
    name = "spiderSO"
    allowed_domains = ["cumulodata.com"]
    start_urls = ["http://www.cumulodata.com"]
    extractor = SgmlLinkExtractor()

    def parse_start_url(self, response):
        #3
        print('----------manual call of',response)
        self.parse_links(response)
        print('----------manual call done')
        # 1 return Request(self.start_urls[0]) # does not call parse_links(example.com)
        # 2 return Request(self.start_urls[0],callback = self.parse_links) # does not call parse_links(example.com)

    rules = (
        Rule(extractor,callback='parse_links',follow=True),
        )

    def parse_links(self, response):
        hxs = …
Run Code Online (Sandbox Code Playgroud)

python scrapy

10
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

scrapy ×2

scrapyd ×1