使用scrapy采集的文章里面有很多图片,都是远程图片,我想把这些远程图片都下载下来,然后把图片地址全都改成相对路径。 我想把里面的图片都下载到本地,然后再把路径保存再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 itemdef 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可以下载图片,但只能将下载的图片存到一个字段里。 所以请教一下大家在这种情况下是怎么操作的? 万分感谢。
|