- 部分 I. Python 入门
- 第 1 章 Python 入门
- 第 2 章 Python Package Index (PyPI)
- 第 3 章 Python 模块
- 第 4 章 数据类型
- 第 5 章 数据结构
- 第 6 章 Class
- 第 7 章 Input/Output
- 第 8 章 Pipe
- 第 9 章 Library
- 9.2. 随机数
- 9.3. Python 多线程
- 9.13. syslog
- 9.5. Socket
- 9.6. subprocess
- 9.7. YAML
- 9.8. Daemon
- 9.9. python-memcached
- 9.10. Pyro - Pyro is short for PYthon Remote Objects
- 9.11. Python Imaging Library
- 9.12. getopt – Command line option parsing
- 9.14. python-subversion
- 9.15. SimpleHTTPServer
- 9.16. fuse-python.x86_64 : Python bindings for FUSE - filesystem in userspace
- 9.17. Network
- 9.18. Python-spdylay - Spdylay Python Extension Module
- 9.19. mechanize
- 9.20. Dominate
- 第 10 章 Frameworks
- 第 12 章 终端环境开发
- 部分 II. Python 数据分析
- 第 13 章 Crawler
- 第 14 章 Scrapy - Python web scraping and crawling framework
- 第 15 章 Pandas - Python Data Analysis Library
- 第 16 章 股票
- 第 17 章 数据可视化
- 部分 III. 人工智能 AI
- 第 18 章 OCR
- 第 19 章 语音处理
- 第 20 章 视频
- 第 21 章 人脸识别
- 第 22 章 自然语言处理
- 第 23 章 自动化运维
- 第 24 章 办公自动化
- 第 25 章 OpenCV
- 第 26 章 图形开发
- 第 27 章 3rdparty toolkit
- 第 29 章 实用代码
- 第 30 章 FAQ
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
14.5. 下载图片
14.5. 下载图片
创建项目
neo@MacBook-Pro ~/Documents % scrapy startproject photo
neo@MacBook-Pro ~/Documents % cd photo
安装依赖库
neo@MacBook-Pro ~/Documents/photo % pip3 install image
创建爬虫
neo@MacBook-Pro ~/Documents/photo % scrapy genspider jiandan jandan.net
14.5.1. 配置 settings.py
忽略 robots.txt 规则
# Obey robots.txt rules ROBOTSTXT_OBEY = False
配置图片保存路径与缩图
#图片保存路径 IMAGES_STORE='/tmp/photo' #DOWNLOAD_DELAY = 0.25 #缩略图的尺寸,设置这个值就会产生缩略图 IMAGES_THUMBS = { 'small': (50, 50), 'big': (200, 200), }
14.5.2. 修改 pipelines.py 文件
加入 process_item()与 item_completed() 方法
注意:PhotoPipeline(ImagesPipeline) 需要继承 ImagesPipeline
# -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html import scrapy from scrapy.pipelines.images import ImagesPipeline from scrapy.exceptions import DropItem class PhotoPipeline(ImagesPipeline): # def process_item(self, item, spider): # return item def get_media_requests(self, item, info): for image_url in item['image_urls']: yield scrapy.http.Request('http:'+image_url) def item_completed(self, results, item, info): image_paths = [x['path'] for ok, x in results if ok] if not image_paths: raise DropItem("Item contains no images") item['image_paths'] = image_paths return item
14.5.3. 编辑 items.py
忽略 robots.txt 规则
# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html import scrapy class PhotoItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() #图片的链接 image_urls = scrapy.Field() images = scrapy.Field() image_paths = scrapy.Field() pass
14.5.4. Spider 爬虫文件
# -*- coding: utf-8 -*- import scrapy from scrapy.loader import ItemLoader from photo.items import PhotoItem class JiandanSpider(scrapy.Spider): name = 'jiandan' # allowed_domains = ['jandan.net'] allowed_domains = [] start_urls = ['http://jandan.net/ooxx'] def parse(self, response): l = ItemLoader(item=PhotoItem(), response=response) l.add_xpath('image_urls','//img//@src' ) yield l.load_item() next_page = response.xpath('//a[@class="previous-comment-page"]//@href').extract_first() #翻页 if next_page: yield response.follow(next_page,self.parse) pass def parse_page(self, response): l = ItemLoader(item=PhotoItem(), response=response) l.add_xpath('image_urls','//img//@src' ) return l.load_item()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论