如何在scrapy中设置深度限制

时间:2016-02-01 12:31:41

标签: python web-scraping scrapy

我正在使用此蜘蛛抓取页面并下载其图像:

import scrapy

from scrapy.contrib.spiders import Rule, CrawlSpider
from scrapy.contrib.linkextractors import LinkExtractor
from imgur.items import ImgurItem
import re

from urlparse import urljoin

class ImgurSpider(CrawlSpider):
    name = 'imgur'
    allowed_domains = ['some.page']

    start_urls = [u'some.page']

    rules = [Rule(LinkExtractor(allow=['.*']), 'parse_imgur')]

    def parse_imgur(self, response):
        image = ImgurItem()
        image['title'] = 'a' 

        relative_urls = re.findall('= "([^"]+.jpg)',response.body)
        image['image_urls'] = [urljoin(response.url, url) for url in relative_urls]


        return image

但我在这里有两个问题,第一个是我无法将深度限制设置为一个altought我在运行蜘蛛时使用“-s DEPTH_LIMIT = 1”:

scrapy crawl imgur -s DEPTH_LIMIT = 1

第二个问题是我收到了除主页之外的所有网页图片:

我没有从该页面获取任何图像。

编辑。

一个@ Javitronxo

像这样:

def parse(self, response):
    image = ImgurItem()
    image['title'] = 'a' 

    relative_urls = re.findall('= "([^"]+.jpg)',response.body)
    image['image_urls'] = [urljoin(response.url, url) for url in relative_urls]


    return image

我没有那样的图像。

1 个答案:

答案 0 :(得分:2)

由于您的代码中有此规则:

validateValues

蜘蛛从网页中提取所有链接,因此最终会被跟踪。

如果您只想抓取主页面中的图片,我建议删除规则并更改覆盖默认rules = [Rule(LinkExtractor(allow=['.*']), 'parse_imgur')] 的方法标题:

parse

这样蜘蛛就会开始抓取def parse(self, response): 字段中的图像,返回对象,然后完成执行。