【问题标题】:Can't get urls count from spider (Scrapy)无法从蜘蛛(Scrapy)获取网址计数
【发布时间】:2017-10-21 16:26:39
【问题描述】:

我正在尝试获取要在SitemapSpider 中抓取的网址数量。我试图覆盖start_requests 方法,但它打印出0。我有一个sitemap_url,其中包含数千个网址。我想统计一下这些网址。

这是我尝试过的,但我认为站点地图中的 URL 不在 start_urls 中。

class MainSpider(SitemapSpider):
    name = 'main_spider'
    allowed_domains = ['...']
    sitemap_urls = ['http://.../sitemap.xml']

    def start_requests(self):
        r = super(MainSpider, self).start_requests()
        self.urls_count = len(self.start_urls)
        print self.urls_count 
        return r

您知道如何获取号码吗?

【问题讨论】:

    标签: python python-2.7 scrapy web-crawler


    【解决方案1】:

    您可以在下面使用。

    class MainSpider(SitemapSpider):
        name = 'main_spider'
        allowed_domains = ['...']
        sitemap_urls = ['http://.../sitemap.xml']
    
        def start_requests(self):
            r = super(MainSpider, self).start_requests()
            r_list = list(r)
            print len(r_list)
            return r_list
    

    super(MainSpider, self).start_requests() 返回一个生成器,列表将确保您获得完整的收益。但这会在大型站点地图的情况下减慢您的爬虫启动速度。实际的scrapy可能会延迟开始

    【讨论】:

    • 这会计算 sitemap_urls 的长度。我想获取在站点地图中找到的网址数量。有可能吗?
    • 这是可能的,但不是直截了当的。问题是您需要下载所有这些站点地图 url,然后由您的班级中的_parse_sitemap 处理。所以这是可能的,但需要进行适当的修改。您需要在 start_requests 方法中为每个 url 创建一个响应对象,然后将它们传递给 _parse_sitemap 并从这些生成器中获取列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多