python scrapy 爬取图片操作

    科技2026-01-15  8

    前面学习scrapy爬取文字和链接,对比requests库来说复杂不少,但是呢在爬取图片上来说,比requests可是简单不少(主要是在pipelines.py里面实现)

    使用前:记得安装pillow模块哟,不然最后操作完毕,运行的时候可能会出现以下错误提示:

    No module named 'PIL'

    下面开始操作咯:

    一、在pycharm最底下的Terminal里面新建项目yxq,输入以下内容:

    E:\mypypy\myscrapy>scrapy startproject yxq001

    二、在pycharm最底下的Terminal里面创建爬虫文件file01,先用cd yxq 进入到爬虫项目,再输入以下内容:

    E:\mypypy\myscrapy\yxq>scrapy genspider file01 www.baidu.com

    三、在items.py中输入以下代码:

    import scrapy class YxqItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() pu = scrapy.Field()

    四、在file01文件中输入以下内容(和之前爬取文字操作基本一致):

    import scrapy from yxq.items import YxqItem class File01Spider(scrapy.Spider): name = 'file01' # allowed_domains = ['www.baidu.com'] start_urls = ['http://www.jkl.com.cn/cn/phoLis.aspx?id=697'] def parse(self, response): picurl = response.xpath('//div[@id="list"]//img/@src').extract() for pu in picurl: pu = 'http://www.jkl.com.cn' + pu item = YxqItem() item['pu'] = pu yield item

    五、在pipelines.py输入以下内容:

    from scrapy.pipelines.images import ImagesPipeline import scrapy class imagesPipelines(ImagesPipeline): def get_media_requests(self, item, info): yield scrapy.Request(item['pu']) def file_path(self, request, response=None, info=None): picname = request.url.split('/')[-1] return picname

    pipelines.py爬取图片的内容基本都是固定的,以后要重复使用的话,items.py传了什么参数过来,pipelines.py第一个函数里面的yield scrapy.Request(item['pu'])中的item改成啥就可以了~

    另外,file_path函数里面是保存的文件名称。我这边是根据链接地址最右边斜杠/后面的内容作为文件名称,可以自行进行更改。

    六、在setting.py中做好以下设置,记得取消前面的#注释,其他内容不用动:

    ROBOTSTXT_OBEY = False USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3756.400 QQBrowser/10.5.4043.400' LOG_LEVEL = 'ERROR' ITEM_PIPELINES = { 'yxq.pipelines.imagesPipelines': 300, } IMAGES_STORE = 'E:/python图片'

    前面ROBOTSTXT_OBEY、USER_AGENT、LOG_LEVEL都说过好多遍了,基本照着抄就可以,后面两个再解释一下:

    ITEM_PIPELINES = {   'yxq.pipelines.imagesPipelines': 300,} :这里的imagesPipelines就是pipelines.py中类的名称

    IMAGES_STORE = 'E:/python图片' :这里就直接是文件要保存的地址了~

    七、在pycharm最底下的Terminal里面输入以下代码运行:

    E:\mypypy\myscrapy\yxq>scrapy crawl file01

    最后效果图:

    Processed: 0.017, SQL: 9