scrapy爬虫爬取小姐姐图片(不羞涩)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scrapy爬虫爬取小姐姐图片(不羞涩)相关的知识,希望对你有一定的参考价值。

这个爬虫主要学习scrapy的item Pipeline

是时候搬出这张图了:

scrapy爬虫爬取小姐姐图片(不羞涩)_github

 

 

 当我们要使用item Pipeline的时候,要现在settings里面取消这几行的注释

scrapy爬虫爬取小姐姐图片(不羞涩)_github_02

 

 

 

我们可以自定义Item Pipeline,只需要实现指定的方法,其中必须要实现的一个方法是: ​​p​

  process_item(item,spider)

另外还有几个方法我们有时候会用到

  open_spider(spider)

  close_spider(spider)

  from_crawler(cls,crawler)

 

在不羞涩的主页我们使用xpath进行分析可以得到每一张小姐姐图片的url,我们将每一页urls作为一个item对象返回,并且找到下一页的链接,持续爬取

class IndexSpider(scrapy.Spider):
name = index
allowed_domains = [buxiuse.com]
start_urls = [https://www.buxiuse.com/?page=1]
base_domain="https://www.buxiuse.com"

def parse(self, response):
image_urls=response.xpath(//ul[@class="thumbnails"]/li//img/@src).getall()
next_url=response.xpath(//li[@class="next next_page"]/a/@href).get()
item=BuxiuseItem(image_urls=image_urls)
yield item
if not next_url:
return
else:
yield scrapy.Request(self.base_domain+next_url)

 对于yield的item对象,因为只返回了一个urls,所以我们在items进行设置

class BuxiuseItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
image_urls=scrapy.Field()

  这样在刚才的index文件里面,才可以新建BuxiuseItem对象,

item=BuxiuseItem(image_urls=image_urls)

  当然要先在index导入BuxiuseItem这个类

接着在pipeline里面我们处理接收到的Item和下载图片

我们先创建一个image的文件夹储存爬取到的图片,使用os.mkdir(self.path)

这个self.path由我们自己设定,这里学到了一个知识点:os.path.dirname(__file__)可以显示当前文件所在的位置

我们先输出一下 

scrapy爬虫爬取小姐姐图片(不羞涩)_github_03

 

 

scrapy爬虫爬取小姐姐图片(不羞涩)_ide_04

 

 使用os.path.dirname(os.path.dirname(__file__))可以返回到上一级目录位置

scrapy爬虫爬取小姐姐图片(不羞涩)_绝对路径_05

 

 

scrapy爬虫爬取小姐姐图片(不羞涩)_绝对路径_06

 

 我们使用这个方法控制储存的目录,如果是其他比较远的位置就使用绝对路径吧。

因为我是python2的环境,使用

urllib.urlretrieve(link,os.path.join(self.path,image_name))

  将链接上的图片以指定的文件名保存在指定位置上

所以pipeline里面的代码就是

import os
import urllib
from scrapy.pipelines.images import ImagesPipeline
import settings
i=1
class BuxiusePipeline(object):
def __init__(self):
self.path=os.path.join(os.path.dirname(os.path.dirname(__file__)),images)
if not os.path.exists(self.path):
os.mkdir(self.path)

def process_item(self, item, spider):
global i
link_list=item[image_urls]
for link in link_list:
print i
image_name=str(i)+".jpg"
urllib.urlretrieve(link,os.path.join(self.path,image_name))
i=i+1
return item

  输出i是为了让我能看到脚本还在正常下载,免得被网站ban掉了还不知道。

运行一下看看效果: 

 可以看到小姐姐的图片已经被下载下来了,并且按照i的编号整齐排列,完事。

 

github代码:

​https://github.com/Cl0udG0d/scrapy_demo/tree/master/buxiuse​



以上是关于scrapy爬虫爬取小姐姐图片(不羞涩)的主要内容,如果未能解决你的问题,请参考以下文章

手把手带你爬取小姐姐私房照,准备好你的纸!

不羞涩社区图片爬取,我真的不是为了看小姐姐私照,从未这么渴望过知识!

Python爬虫:运用多线程IP代理模块爬取百度图片上小姐姐的图片

Python爬虫:运用多线程IP代理模块爬取百度图片上小姐姐的图片

520表白神器 —— 一个python就够了(附爬取小姐姐私房照的程序哦)

Python爬虫应用实战-爬取网站漂亮小姐姐,可爱的小姐姐谁不爱呢?