一、创建项目、spider,item以及配置setting

创建项目:scrapy startproject nitu

创建爬虫:scrapy genspider -t basic nituwang nipic.com

写个item:
# -*- coding: utf-8 -*- import scrapy class NituItem(scrapy.Item): url =
scrapy.Field()
配置setting(重要!):

1.首先打开User-Agent(反爬虫策略):
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/55.0.2883.87 Safari/537.36'
2.ROBOTSTXT协议改为False(主要是为了顺利获取图片)

3.打开pipeline:


ITEM_PIPELINES = { 'nitu.pipelines.NituPipeline': 300, }

二、spider

(一)首先来分析昵图网中的各个分层链接




找到这三个模块的链接比较简单:





可以看出,只要找到a标签下的三个href链接就行了,抓到的内容附在主网页http://www.nipic.com后,例如http://www.nipic.com/media就可以进入这个模块的链接中,spider代码如下:
#第一层链接 def parse(self, response): Frist_url =
response.xpath('//div[@class="newIndex-nav-condition fl"]/a/@href').extract()
True_url = Frist_url[2:5] for i in range(len(True_url)): TrueTrue_url =
"http://www.nipic.com/" + True_url[i] yield
Request(url=TrueTrue_url,callback=self.next1)
(二)进入到第二层链接,如下图:




同理,从审查元素中抓取链接:




spider代码如下:
#第二层链接 def next1(self,response): Second_url =
response.xpath('//dd[@class="menu-item-list clearfix"]//a/@href').extract() for
m in range(len(Second_url)): Second_true_url = "http://www.nipic.com/" +
Second_url[m] yield
Request(url=Second_true_url,meta={'key':Second_true_url},callback=self.next2)
(三)进入到第二层链接之后,就直接出现了多页存在图片了,思路越来越清晰:




看到这里,我们只需找到二层链接中的总页数,由此建立一个函数:
def next2(self,response): #查找总页数 page_num =
response.xpath('//div[@class="common-page-box mt10
align-center"]/a/@href').extract() page_true_num = page_num[-1].split('=')[-1]
for n in range(1,int(page_true_num)+1): page_url = str(response.meta['key']) +
"?page=" + str(n) yield Request(url=page_url,callback=self.next3)
(四)接下来就是查找如何进入照片的第三层链接,以获取清晰大图:




二话不说,直接写xpath来拿链接:
#第三层链接 def next3(self,response): img_url =
response.xpath('//li[@class="works-box mb17
fl"]/div[@class="search-works-info"]/a/@href').extract() for k in
range(len(img_url)): yield Request(url=img_url[k],callback=self.next4)
(五)最后一部,成败于此,进入到大图的链接:




拿下:
#获取大图的链接 def next4(self,response): img_big_url =
response.xpath('//div[@class="show-img-section overflow-hidden
align-center"]/img/@src').extract()[0] item = NituItem() item['url'] =
img_big_url yield item
三、PIPELINE:

使用urllib.request中的urlretrieve来下载图片到本地当中
import urllib.request class NituPipeline(object): def process_item(self, item,
spider): filename = item["url"].split('/')[-1] file =
"F:/python/python项目/nitu_img/" + filename
urllib.request.urlretrieve(item["url"], filename=file) return item
四、运行爬虫

scrapy crawl nituwang --nolog

结果如下:




高清无码大图得到。完活

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信