这篇文章主要介绍python爬虫怎么使用内置的scrapy内置下载文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。
一、为什么要选择scrapy内置的下载文件?
1、避免重新下载最近已经下载过的数据;
2、可以方便的指定文件存储的路径;
3、可以将下载的图片转换成通用的格式,如:png,jpg等;
4、可以方便地生成缩略图;
5、可以方便地检测图片的宽和⾼,确保它们满足最小限制;
6、异步下载,效率非常高。
二、使用images pipeline下载文件步骤如下:
第一步,在items文件中定义两个属性,分别为image_urls以及images,这两个属性名字不能随意修改。
image_urls = scrapy.Field() # 图片的url images = scrapy.Field() # 路径
第二步,编写爬虫程序,需要注意的是image_urls用来存储需要下载文件的url链接,需要给⼀个列表;
pic_url = pic.xpath('./a/img/@src').extract_first() pic_url = response.urljoin(pic_url) item['image_urls'] = [pic_url]
第三步,在settings中指定路径IMAGES_STORE = xxxxxxx,当图片下载完成后,scrapy会把图片下载的相关信息存储到item的images属性中,如下载路径、下载的url和图片校验码等;
import os IMAGES_STORE = os.path.join(os.path.dirname(__file__), 'result_pic')
第四步,在settings中做配置,开启内置的图片管道,此时可以不用自带的管道。
'scrapy.pipelines.images.ImagesPipeline':1
三、具体代码
# 爬虫代码 import scrapy from day21.vehicle_home.vehicle_home.items import VehicleHomeItem class VehPicSpider(scrapy.Spider): name = 'veh_pic' allowed_domains = ['car.autohome.com.cn'] base_url = 'https://car.autohome.com.cn/photolist/series/18/p{}/' start_urls = [base_url.format(1)] def parse(self, response): # 获取图片标签列表 pic_lists = response.xpath('//ul[@id="imgList"]/li') for pic in pic_lists: pic_url = pic.xpath('./a/img/@src').extract_first() # 上述获取的url需要进一步补全 pic_url = response.urljoin(pic_url) item = VehicleHomeItem() item['image_urls'] = [pic_url] # 传递列表 print(item) yield item # 翻页逻辑 for page in range(2, 3): next_url = self.base_url.format(page) yield scrapy.Request(next_url) # settings 代码,只给出关键部分 # 开启内置管道 ITEM_PIPELINES = { # 'vehicle_home.pipelines.VehicleHomePipeline': 300, 'scrapy.pipelines.images.ImagesPipeline': 1, } # 指定图片存放路径 import os IMAGES_STORE = os.path.join(os.path.dirname(__file__), 'result_pic') # items 代码 import scrapy class VehicleHomeItem(scrapy.Item): image_urls = scrapy.Field() # 图片的url images = scrapy.Field() # 图片路径
以上是“python爬虫怎么使用内置的scrapy内置下载文件”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。