所以我一直在尝试通过创建一个非常基本的爬虫来学习Python。目前,除了图像之外,我的所有抓取工作都按预期进行:
我已经在我的settings.py中添加了一个图像存储,我成功地通过蜘蛛提取了图像的URL,但它当前没有保存任何图像。
提取图像URL的行如下:
snowboard['image_URL'] = ''.join(item.xpath('li[@class="productImage"]/a/img/@data-original').extract())
这将产生类似于以下内容的内容:
"image_URL": "/zoom/858553/230"
在我的 items.json 中。
到目前为止,除了没有图像被保存到我的图像存储中之外,一切看起来都不错。作为引用,这是我的项目管道:
class SnowboardPipeline(object):
def process_item(self, item, spider):
return item
def get_media_requests(self, item, info):
for imageURL in item['image_URL']:
yield Request(imageURL)
我很好奇这是否与图像没有异常有关,或者在下拉图像时我已经查看了文档中明显明显的内容。
最佳答案
对于那些好奇的人来说,我的问题本质上是图像管道需要完整的 URL 而不仅仅是扩展名。事后看来,这是显而易见的。
我们可以通过将 urlparse 导入到抓取工具中来解决此问题,然后将我们的相对图像 URL 与响应 URL 结合起来,如下所示:
snowboard['image_urls'] = [urlparse.urljoin(response.url, snowboard['URL'])]
这将产生图像的完整 URL。然后,我遇到了缺少 jpeg 解码器的问题,但通过安装相关依赖项并重新安装 PIL 解决了这个问题。
关于python - Scrapy 和图像抓取的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24406711/