自己处理下载时不需要设置item.py,pipelines.py等这些文件,这些文件保持默认便可,只需要自己用css也好,xpath也好,获取到图片链接之后,使用常规的图片下载方法,下载图片即可,像下面这样:
try: os.makedirs(root_path) except FileExistsError: pass r = requests.get(img_url, headers=headers) with open(root_path + img_name, 'wb') as f: f.write(r.content)
就不多讲了,下面讲使用scrapy处理图片下载,下面的内容都是在你已经正确获取到了图片链接的前提下。
首先,编写item.py文件:
class ImagesItem(scrapy.Item): file_name = scrapy.Field() img_urls = scrapy.Field()
上面的file_name为文件保存路径,img_urls为图片下载的链接。
然后爬虫主文件中实例化item:
item = ImagesItem() item['file_name'] = root_path + img_name item['img_urls'] = img_url yield item
接着就是处理下载的pipelines.py文件了:
class ImagePipeline(ImagesPipeline): def get_media_requests(self, item, info): for img_url in item['img_urls']: yield Request(img_url, meta={'name': item['file_name']}) def file_path(self, request, response=None, info=None): filename = request.meta['name'] return filename
之后就是在setting.py中启用ImagePipeline了:
IMAGES_STORE = 'D:\\' ITEM_PIPELINES = { 'images.pipelines.ImagePipeline': 300, }
注意这里的IMAGE_STORE是下载路径,会和上面的filename进行拼接,请确认自己设置的IMAGE_STORE和filename拼接出来的路径正确,如果没有意外,到这里运行爬虫之后已经可以正常爬取图片到设定的文件夹了。