|
先到项目的目录下 - /root/Scrapy/boge/boge
- 首先安装图片库的支持 Ubuntu apt-get install libjpeg-dev libfreetype6-dev zlib1g-dev
- centos yum install libjpeg-devel freetype-devel zlib-devel
- #############################################################################################################################
- ###PIL pip install PIL --allow-external PIL --allow-unverified PIL 不得不吐槽下这个库 真是难用,各种报错,我们就不用这个库了。。。。#
- #############################################################################################################################
- 安装Pillow ==========> pip install Pillow 这个靠谱,建议用这个
- root@Scrapy:~/Scrapy/boge/boge#cat items.py
- from scrapy.item import Item, Field
- class BogeItem(Item):
- # define the fields for your item here like:
- # name = Field()
- image_urls = Field() 我们定义的菜单,类似字典的形式
- images = Field()
- root@Scrapy:~/Scrapy/boge/boge# cat pipelines.py
- #定义项目管道
- class BogePipeline(object):
- def process_item(self, item, spider):
- return item
- 下面这部分重写的操作如果不熟悉源码就不要写进来了
复制代码下面这部分重写的操作如果不熟悉源码就不要写进来了 - ###############################################################################################################################################
- #import scrapy
- #from scrapy.contrib.pipeline.images import ImagesPipeline
- #from scrapy.exceptions import DropItem
- #
- #class MyImagesPipeline(ImagesPipeline): 重写ImagesPipeline,我们需要在这里重写下载的函数才能下载
- #
- # def get_media_requests(self, item, info): | 源码 def get_media_requests(self, item, info):
- # for image_url in item['image_urls']: | return [Request(x) for x in item.get(self.IMAGES_URLS_FIELD, [])]
- # yield scrapy.Request(image_url) | #我们在这里自己定义了item字典中的urls如何传给图片管道
- #
- # def item_completed(self, results, item, info): |源码 def item_completed(self, results, item, info):
- # image_paths = [x['path'] for ok, x in results if ok] | if self.IMAGES_RESULT_FIELD in item.fields:
- # if not image_paths: | item[self.IMAGES_RESULT_FIELD] = [x for ok, x in results if ok]
- # raise DropItem("Item contains no images") | return item
- # item['image_paths'] = image_paths |
- # return item |
- ###############################################################################################################################################
复制代码- root@Scrapy:~/Scrapy/boge/boge# cat settings.py
- #开启图片管道以及定义图片的配置
- BOT_NAME = 'boge'
- SPIDER_MODULES = ['boge.spiders']
- NEWSPIDER_MODULE = 'boge.spiders'
- # Crawl responsibly by identifying yourself (and your website) on the user-agent
- #USER_AGENT = 'boge (+http://www.yourdomain.com)'
- ITEM_PIPELINES = {'scrapy.contrib.pipeline.images.ImagesPipeline': 1}
- #1,2表示优先级,启用图片管道,我查看了下源码ImagesPipeline是继承了
- FilesPipeline,所以这里不需要启用FilesPipeline
- IMAGES_STORE = '/tmp/pic'
- IMAGES_EXPIRES = 15
- #IMAGES_MIN_HEIGHT = 110
- #IMAGES_MIN_WIDTH = 110
- /root/Scrapy/boge/boge/spiders
- root@Scrapy:~/Scrapy/boge/boge/spiders# cat pa.py
- #!/usr/bin/python
- # -*- coding:utf-8 -*-
- from scrapy import spider
- from scrapy.selector import Selector #导入提取器
- from boge.items import BogeItem #这里是导入了我们的item.py 里我们自己定义的类
- class boge(spider.Spider): #重写Spider
- name = "moive" #唯一的爬虫名字
- allowed_domains = ["blu-raydisc.tv"] #允许的域,防止无限爬
- start_urls = [ #开始的urls
- "http://blu-raydisc.tv/",
- ]
- def parse(self, response): #处理模块
- sel = Selector(response) #实例化Selector,参数为reponse
- item = BogeItem() #实例化我们自己定义item,可以理解为实例化字典
- item['image_urls'] = sel.xpath('//img/@src').extract() #提取图片,前面一章已经讲解了xapth
- return item
复制代码好了,这里我们结构已经搭建好了。来运行一下如何
- root@Scrapy:~/Scrapy/boge/boge/spiders# scrapy crawl moive
复制代码这里输出太多了,就不打印出来了 如果你想保存这些链接
- root@Scrapy:~/Scrapy/boge/boge/spiders# scrapy crawl moive -o urls.txt -t json
复制代码 以json的格式保存urls下载图片
- root@Scrapy:~/Scrapy/boge/boge/spiders# cat pa.py
- #!/usr/bin/python
- # -*- coding:utf-8 -*-
- from scrapy import spider
- from scrapy.selector import Selector
- from boge.items import BogeItem
- import os
- class boge(spider.Spider):
- name = "moive"
- allowed_domains = ["blu-raydisc.tv"]
- start_urls = [
- "http://blu-raydisc.tv/",
- ]
- def parse(self, response):
- sel = Selector(response)
- item = BogeItem()
- item['image_urls'] = sel.xpath('//img/@src').extract()
- # item['image_urls'] = sel.xpath('//img/@src').re(r'.*[jpg|gif|png]我们再次运行scrapy crawl moive可以看到下载,但是我们这里由于在settings.py里设置了图片的规则,所以全部被过滤掉了。还有些报错,可以发现报错的scrapy会直接丢弃,不会造成阻塞。我们到/tmp/pic目录下回发现一个full的目录,图片就存在这里了,这个路径是在settings.py里面设置的好了,一个简单的爬虫就完成了,下次我就给大家带来 迭代爬取整个站点的爬虫这里指是一个简单的实例,分享给大家。我也正在学习scrapy,如果有不对的地方希望大家指正一下。
- )
- item['images'] = sel.xpath('//img/@src').re(r'[^/]*.[jpg|png|gif]我们再次运行scrapy crawl moive可以看到下载,但是我们这里由于在settings.py里设置了图片的规则,所以全部被过滤掉了。还有些报错,可以发现报错的scrapy会直接丢弃,不会造成阻塞。我们到/tmp/pic目录下回发现一个full的目录,图片就存在这里了,这个路径是在settings.py里面设置的好了,一个简单的爬虫就完成了,下次我就给大家带来 迭代爬取整个站点的爬虫这里指是一个简单的实例,分享给大家。我也正在学习scrapy,如果有不对的地方希望大家指正一下。
- )
- # [os.system('wget %s' %i) for i in item['image_urls']] 我们上面启用了下载管道,这句话就不科学了 果断注释掉
- return item
复制代码 我们再次运行scrapy crawl moive可以看到下载,但是我们这里由于在settings.py里设置了图片的规则,所以全部被过滤掉了。还有些报错,可以发现报错的scrapy会直接丢弃,不会造成阻塞。我们到/tmp/pic目录下回发现一个full的目录,图片就存在这里了,这个路径是在settings.py里面设置的好了,一个简单的爬虫就完成了,下次我就给大家带来 迭代爬取整个站点的爬虫这里指是一个简单的实例,分享给大家。我也正在学习scrapy,如果有不对的地方希望大家指正一下。
|
|