scrapy爬取昵图网图片
一 : 创建scrapy项目
(1) 使用命令创建项目 : scrapy startproject nipic[项目名可以随意]
(2) 使用命令创建一个爬虫文件 : scrapy genspider -t basic np nipic.com
参数说明:
-t basic : 使用basic模版创建文件
np : 创建的爬虫文件名
nipic.com : 要爬取网站的域名(本次爬取的是昵图网)
(3) 项目结构图
二 : 爬取思路分析
(1) 打开昵图网首页, 找到一级导航菜单
备注 : 本次爬取我们只爬取 设计, 摄影, 多媒体 三个一级菜单
(2) 我们用工开发者工具获取到这三个一级菜单的url
(3) 我们点击一级菜单获取到它所对应的二级菜单url
(4) 我们随便点击一个二级菜单回进入菜单列表页, 此时我们需要获取分页页码, 进而可以爬取每一页的图片
(5) 获取每一页的图片(此次爬取我们只爬取大图片), 我们点击小图片会进入的大图片,然后获取大图片的路径
(6) 开始爬取并下载到本地
三 : 代码
(1) 首先编写 items.py
class NipicItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()# 创建保存url的容器url = scrapy.Field()
(2) 编写核心的爬虫文件 np.py
# -*- coding: utf-8 -*-
import scrapyfrom scrapy.http import Requestfrom nipic.items import NipicItemclass NpSpider(scrapy.Spider):name = "np"allowed_domains = ["nipic.com"]start_urls = ['http://www.nipic.com/']def parse(self, response):#获取所有的一级导航菜单的urlnavUrls = response.xpath("//div[@class='fl nav-item-wrap']/a/@href").extract()#print(navUrls)newNavUrls = navUrls[1:4] # ['/design/index.html', '/photo/index.html', '/media/index.html']#print(newNavUrls)for i in newNavUrls:# 获取完整的url ---> http://www.nipic.com/design/index.htmlnavUrl = response.urljoin(i)#print(navUrl)# 交由下一个回调函数处理yield Request(url=navUrl, callback=self.secondNavCallback)# 处理二级导航菜单def secondNavCallback(self, response):# 得到所有二级菜单的urlsecondNavUrls = response.xpath("//div[@class='menu-box-bd']/dl/dt/div/a/@href").extract()#print(secondNavUrls)for i in secondNavUrls:secondNavUrl = response.urljoin(i)yield Request(url=secondNavUrl, callback=self.imagePageCallback)# 处理点击二级菜单后的图片列表页def imagePageCallback(self, response):# 得到所有的分页页码pages = response.xpath("//div[@class='common-page-box mt10 align-center']/a/em/text()").extract()#print(pages)# 获取分页链接 /design/acg/index.html?page=2pageUrls = response.xpath("//div[@class='common-page-box mt10 align-center']/a/@href").extract()#print(pageUrls)pageUrl = pageUrls[0:1]#print(pageUrl)# 得到完整链接pageUrlBase = response.urljoin(pageUrl[0])#print(pageUrlBase)# 截取公共部分commonPageUrl = pageUrlBase[0:-1]# 得到最大的页码maxPage = pages[-1]for i in range(2,int(maxPage)+1):# 拼接分页链接url = commonPageUrl + str(i)#print(url)yield Request(url=url, callback=self.imageListCallback)# 处理每一页的每一张图片def imageListCallback(self, response):# 获取图片的urlimageUrls = response.xpath("//div[@class='search-result overflow-hidden']/ul/li/a/@href").extract()#print(len(imageUrls))for url in imageUrls:imageUrl = url#print(imageUrl)yield Request(url= imageUrl, callback=self.imageDetailCallback)# 正式得到图片def imageDetailCallback(self, response):# 创建 NipicItem 对象nipicItem = NipicItem()# 得到图片image = response.xpath("//div[@id='static']/img/@src").extract()#print(image)nipicItem["url"] = imageyield nipicItem
(3) 修改setting.py(防止反爬虫), 主要修改以下三个部分
将True改为False
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
模拟浏览器
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0'
防止cookie
# Disable cookies (enabled by default)
COOKIES_ENABLED = False
使用piplines
# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'nipic.pipelines.NipicPipeline': 300,
}
scrapy爬取昵图网图片相关推荐
- Scrapy爬取美女图片续集 (原创)
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...
- Scrapy爬取ammmi图片
Scrapy爬取ammmi图片 相关配置: python version:3.7 IDE:Pycharm environment:windows10 Framework:Scrapy 相关链接: We ...
- Scrapy爬取美女图片续集
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...
- Scrapy框架爬取昵图网图片
Scrapy 图片爬虫构建思路为: 1. 分析网站 2. 选择爬取方式和策略 3. 创建爬虫项目-->定义items 4. 编写爬虫文件 5. 调试pipelines与settings 6. 调 ...
- scrapy爬取美女图片
使用scrapy爬取整个网站的图片数据.并且使用 CrawlerProcess 启动. 1 # -*- coding: utf-8 -* 2 import scrapy 3 import reques ...
- 三十一、Scrapy爬取百度图片
@Author:Runsen Runsen近段时间进入Scrapy,写了几个爬虫练练手,就找百度图片入手了.本文就是Scrapy的入门文章. 文章目录 目标 创建项目 分析逻辑 代码 目标 爬取 百度 ...
- scrapy爬取斗鱼图片并且重命名后保存
斗鱼的api为: http://capi.douyucdn.cn/api/v1/live?limit=20&offset=0 建立一个scrapy爬虫 douyu.py import json ...
- 爬虫项目:scrapy爬取昵图网全站图片
一.创建项目.spider,item以及配置setting 创建项目:scrapy startproject nitu 创建爬虫:scrapy genspider -t basic nituwang ...
- 使用Scrapy爬取斗鱼图片
1.具体文件结构 2.代码: items # -*- coding: utf-8 -*-# Define here the models for your scraped items # # See ...
最新文章
- 基于Adaboost算法的人脸检测分类器!
- 《AOSuite 开发手册》之AOSuite 服务端开发
- 与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop
- plsql programming 18 包
- 软件测试测试 python_Python测试简介
- ×××病毒分析工具集之File Format Identifier v1.0
- Linux下VsFTP和ProFTP用户管理高级技巧 之一
- 在Vue 项目 webpack 打包中关于 背景图片的路径问题
- Mysql:命令选项、配置选项、(全局、会话)系统变量、状态变量:SQL模式
- 有关风向及风向处理的笔记
- 江湖传说——阿里巴巴土话102句完整版
- 水位传感器的python代码_关于水的作文
- 楪祈机器人_饥荒联机版罪恶王冠楪祈MOD下载_饥荒楪祈人物MOD下载_玩游戏网
- OFDM载波间隔_OFDM之频域
- 深度解读Swarm/BZZ项目的风险与创新
- 阿里巴巴重要开源项目汇总(资料参考)
- Ctrl+Z的相反快捷键(附最全AndroidStudio常用快捷键)
- 什么样的面试更有效?
- 全栈式PHP集成环境-laragon(二) 配置、使用
- 搭建vmware虚拟机,搭建docker环境
热门文章
- kotlin(java) 文件压缩
- 打开计算机页面只有上面一半,我电脑打开网页总是打开一半,不知道是为什么,请高手指教,谢谢!...
- unable to resolve module
- 数据加密 RSA非对称加密篇
- 中国科学技术大学计算机研究生在哪个校区,中国科学技术大学有几个校区及校区地址 哪个校区最好...
- vue页面返回消息头获取_vue在响应头response中获取自定义headers操作
- 远程桌面用administrator登录的原因简介
- 【肥海豹】-网络安全等级保护(等保)-WINDOWS类服务器配置
- 三分钟教会你用Python爬取心仪小姐姐图片
- python制作小帆船保姆级教学