3

我正在尝试使用 scrapy 下载仅 HTML 的网站。我正在使用 CrawlSpider 类来实现这一点。这是我的解析器的样子。我的爬虫下载页面的 HTML 源代码并制作网站的本地镜像。它成功地镜像了网站,但没有图像。要下载附加到每个页面的图像,我尝试添加:

def parse_link(self, response):
        # Download the source of the page

        # CODE HERE

        # Now search for images

        x = HtmlXPathSelector(response)
        imgs = x.select('//img/@src').extract()

        # Download images

        for i in imgs:
            r = Request(urljoin(response.url, i), callback=self.parse_link)
            # execute the request here

Scrapy's Documentation的示例中,解析器似乎返回了 Request 对象,然后执行该对象。

有没有办法手动执行请求,以获得响应?我需要为每个 parse_link 调用执行多个请求。

4

1 回答 1

2

您可以使用图像管道下载图像。或者,如果您想手动执行请求,请使用yield

def parse_link(self, response):
    """Download the source of the page"""

    # CODE HERE

    item = my_loader.load_item()

    # Now search for images

    imgs = HtmlXPathSelector(response).select('//img/@src').extract()

    # Download images

    path = '/local/path/to/where/i/want/the/images/'
    item['path'] = path

    for i in imgs:
        image_src = i[0]
        item['images'].append(image_src)
        yield Request(urljoin(response.url, image_src),
                callback=self.parse_images,
                meta=dict(path=path))

    yield item

def parse_images(self, response):
    """Save images to disk"""

    path = response.meta.get('path')

    n = get_the_filename(response.url)
    f = open(path + n, 'wb')
    f.write(response.body)
于 2013-03-08T15:37:46.100 回答