scrapy 将抓取内容中的图片下载到本地并替换内容中的原始图片
使用scrapy采集的文章里面有很多图片,都是远程图片,我想把这些远程图片都下载下来,然后把图片地址全都改成相对路径。
比如这篇文章的内容
http://news.163.com/17/1115/2...
里面的图片路径都是类似 http://dingyue.nosdn.127.net/... 这种
我想把里面的图片都下载到本地,然后再把路径保存再item 里面。
def parse_article(self, response):
item = response.meta['item']
item['title'] = response.xpath("//div[@id='content']//h1[@class='entry-title']/text()").extract()[0]
article_imgs = response.xpath("//div[@id='content']/article/div[@class='entry-content']//img")
for img in article_imgs:
img_src = img.xpath("/@src").extract()[0]
file_name = os.path.basename(img_src)
real_name = file_name.split('.')[-2]
print("图片名称", real_name)
save_path = 'images/shopify/' + str(real_name)
print("保存路径", save_path)
local_path = self.save_img(img_src, save_path)
http_img_path = urljoin('http://www.tiangr.com', '/wp_content/uploads/' + local_path)
print("替换路径", http_img_path)
####################
到这里之后不知道该怎么替换原来的图片路径。
####################
item['content'] = response.xpath("//div[@id='content']/article/div[@class='entry-content']").extract()[0]
item['cimage_urls'] = response.xpath("//div[@id='content']//header[@class='entry-header']/img//@src").extract() # 提取图片链接
yield item
def save_img(self, img_url, file_name):
"""
保存图片
:param img_url 图片地址
:param file_name 文件名称
:return:
"""
image_path = img_url.split('.')
extension = image_path.pop()
if len(extension) > 3:
extension = 'jpg'
img_url = urljoin('http://dingyue.nosdn.127.net', img_url)
u = urllib.request.urlopen(img_url)
data = u.read()
f = open(file_name + '.' + extension, 'wb')
f.write(data)
f.close()
return file_name + '.' + extension
我在看文档的时候,看到虽然scrapy有ImagePipeline可以下载图片,但只能将下载的图片存到一个字段里。
所以请教一下大家在这种情况下是怎么操作的?
万分感谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您好,请问下这个问题您解决了吗?我也遇到了这种需求,能否一起探讨下?感谢。