使用scrapy爬取整站图片

scrapy是简单易用的爬虫框架,python语言实现。具体去官网看看吧:http://scrapy.org/

之前想抓一些图片制作拼贴马赛克(见 拼贴马赛克算法),没有找到顺手的爬虫软件,就自己diy一个。使用scrapy抓取非常简单,因为它居然内置了图片抓取的管道 ImagesPipeline。简单到几行代码就可以搞定一个图片爬虫。

scrapy的使用更ruby有点儿类似,创建一个project,然后框架就有了,只要在相应的文件中填写自己的内容就ok了。

spider文件中添加爬取代码:

1
< / p> <p> class ImageDownloaderSpider(CrawlSpider):<br>name = "image_downloader" <br>allowed_domains = [ "sina.com.cn" ]<br>start_urls = [<br> "http://www.sina.com.cn/" <br>]<br>rules = [Rule(SgmlLinkExtractor(allow = []), 'parse_item' )]< / p> <p> def parse_item( self , response):<br> self .log( 'page: %s' % response.url)<br>hxs = HtmlXPathSelector(response)<br>images = hxs.select( '//img/@src' ).extract()<br>items = []<br> for image in images:<br>item = ImageDownloaderItem()<br>item[ 'image_urls' ] = [image]<br>items.append(item)<br> return items< / p> <p>

item中添加字段:

1
< / p> <p> class ImageDownloaderItem(Item):<br>image_urls = Field()<br>images = Field()< / p> <p>

pipelines中过滤并保存图片:

1
< / p> <p> class ImageDownloaderPipeline(ImagesPipeline):< / p> <p> def get_media_requests( self , item, info):<br> for image_url in item[ 'image_urls' ]:<br> yield Request(image_url)< / p> <p> def item_completed( self , results, item, info):<br>image_paths = [x[ 'path' ] for ok, x in results if ok]<br> if not image_paths:<br> raise DropItem( "Item contains no images" )<br> return item< / p> <p>

settings文件中添加project和图片过滤设置:

1
< / p> <p>IMAGES_MIN_HEIGHT = 50 <br>IMAGES_MIN_WIDTH = 50 <br>IMAGES_STORE = 'image-downloaded/' <br>DOWNLOAD_TIMEOUT = 1200 <br>ITEM_PIPELINES = [ '<a href="http://lzhj.me/archives/tag/scrapy" class="st_tag internal_tag" rel="tag" title="Posts tagged with scrapy">scrapy</a>.contrib.pipeline.images.ImagesPipeline' ,<br> 'image_downloader.pipelines.ImageDownloaderPipeline' ]< / p> <p>

代码下载:@github

scrapy优美的数据流:

scrapy_architecture

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
### 回答1: Scrapy是一个Python编写的虫框架,可以帮助你轻松地爬取网站上的数据。如果你想使用Scrapy爬取网站上的图片,可以这样做: 1. 安装Scrapy:在命令行中输入 `pip install scrapy` 即可安装Scrapy。 2. 创建Scrapy项目:在命令行中输入 `scrapy startproject myproject` 即可创建一个名为myproject的Scrapy项目。 3. 创建虫:在myproject文件夹中,使用命令 `scrapy genspider myspider 网站域名` 即可创建一个名为myspider的虫,并指定要爬取的网站域名。 4. 修改虫代码:打开myproject文件夹中的myspider.py文件,可以看到虫的基本框架已经生成。你需要在这个文件中修改一些代码,让虫能够正确地爬取图片。 5. 在虫代码中添加图片下载功能:可以使用Scrapy提供的ImagesPipeline类来下载网站上的图片。在myspider.py文件中添加以下代码: ``` from scrapy.pipelines.images import ImagesPipeline class MySpiderPipeline(ImagesPipeline): def get_media_requests(self, item, info): # 这里的'image_url'是你在爬取的时候获取到的图片的URL yield scrapy.Request(item['image_url']) # 在settings.py文件中设置图片存储路径 IMAGES_STORE = '/path/to/save/images' # ### 回答2: 使用Scrapy爬取网站上的图片需要以下步骤: 1. 创建Scrapy项目:在终端中使用命令`scrapy startproject project_name`创建一个Scrapy项目。 2. 设置Spider:在项目的spiders文件夹中,创建一个Spider来定义爬取规则。在Spider中需要定义起始URL和对应的处理函数。 3. 编写爬取规则:在Spider中使用XPath或CSS选择器来定位目标图片的URL。可以使用`response.xpath()`或`response.css()`方法来获取所需内容。 4. 下载图片:在爬取规则中,使用`response.urljoin()`方法将图片的相对URL转换为绝对URL。然后使用`yield Request(url, callback)`来发送图片请求,将图片URL传递给回调函数进行处理。 5. 在回调函数中,利用Scrapy提供的`response.body`方法来获取图片的二进制数据,并将其保存到本地磁盘。 6. 设置Pipeline:在项目的pipelines文件夹中,创建一个Pipeline来处理下载的图片。可以使用`response.status`来判断图片是否下载成功,然后将图片保存到指定位置。 7. 配置项目:在项目的settings.py文件中,启用自定义的Pipeline,并设置图片保存路径。 8. 运行项目:在终端中使用命令`scrapy crawl spider_name`来运行虫。虫将按照设定的规则爬取网站上的图片,并保存到指定路径。 以上步骤是使用Scrapy爬取网站图片的基本流程,根据具体的网站和需求,可能需要做一些适应性调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值