Scrapy-多层爬取天堂图片网
2024-08-29 11:27:38
1.根据图片分类对爬取的图片进行分类
开发者选项 --> 找到分类地址
爬取每个分类的地址通过回调函数传入下一层
name = 'sky'
start_urls = ['http://ivsky.com/']
def parse(self, response):
selector = Selector(response)
# print(response.text)
types = selector.xpath("//div[@class='kw']/a")
for type in types:
typeUrl = type.xpath("@href").extract()[0] #分类地址
typeName = type.xpath("text()").extract()[0] #分类名称
# print(typeUrl+" "+typeName)
yield Request(self.start_urls[0]+typeUrl,callback=self.parseTotalPage,meta={'typeName':typeName})
2.点击进入一个类型 --> 开发者选项 --> 找到分页代码段
爬取每一个分页的地址也是通过回调函数传入下一层进行处理
def parseTotalPage(self,response): typeName = response.meta["typeName"] # print(typeName) selector = Selector(response) # print(response.text) pageList = selector.xpath("//div[@class='pagelist']//a//@href").extract() #每一页的地址 for page in pageList: yield Request(self.start_urls[0]+page,callback=self.parseGetImg,meta={'typeName':typeName})
3.获取一类图地址 --> 开发者选项 --> 找到相同类图的地址
爬取这类图的地址通过回调函数传入下一层进行处理
def parseGetImg(self,response):
typeName = response.meta["typeName"]
selector = Selector(response)
imgs = selector.xpath("//div[@class='il_img']//a")
for img in imgs:
imgUrl = img.xpath("@href").extract()[0] #一类图的地址
# print(imgUrl+" "+imgName)
yield Request(self.start_urls[0]+imgUrl,callback=self.parseGetMoreImg)
4.查看每张图片的html代码 --> 找到图片的地址
爬取每张图的地址
def parseGetMoreImg(self,response): # / html / body / div[3] / div[4] / ul / li[3] / div / a / img selector = Selector(response) # print(response.text) items = IvskyItem() items["imgName"] = response.meta["imgName"] items["imgUrl"] = selector.xpath("//div[@class='il_img']//a//img//@src").extract() # print(items) yield items
最后将图片传入pipelines.py 进行下载处理,要先在setting.py 设置,否则无法进入pipelines.py
ITEM_PIPELINES = { 'ivsky.pipelines.IvskyPipeline': 300, }
代码地址:https://github.com/WitW/ivsky
最新文章
- 04.LoT.UI 前后台通用框架分解系列之——轻巧的弹出框
- 通过配置文件启动odoo-10.0
- [mysql]max_allowed_packet ,centos
- Eclipse的常用快捷键、旁门左道、系统错误小贴士
- [.NET] 使用C#开发SQL Function来提供服务 - 简讯发送
- 22.python笔记之web框架
- boost muti-thread
- GUI树组件,表格
- 固定cell.imageView.image的大小
- 怎样使用 App Studio 高速定制你自己的 Universal Windows App
- Windows zip安装MySQL
- [VS]反编译_DllToC#_REFLECTOR8.5
- abaqus修改inp直接建立工程
- vue构造器的内容
- Django-website 程序案例系列-16 modle.form(表单验证)
- WPF 中Canvas图形移动、缩放代码
- 洛谷P2672 推销员
- 【ELK】【docker】【elasticsearch】2.使用elasticSearch+kibana+logstash+ik分词器+pinyin分词器+繁简体转化分词器 6.5.4 启动 ELK+logstash概念描述
- MySQL与Oracle的区别之我见
- javascript之for循环的几种写法
热门文章
- canvas实现倒计时效果示例(vue组件内编写)
- 改变UITableView选中行高亮的颜色
- [转]解决error: ";net.ipv4.netfilter.ip_conntrack_max"; is an unknown key错误
- linux_vi快捷键
- jquery取前、后、父、子元素
- elasticsearch java和_head插件对索引文档的增删改查
- JAVA中pdf转图片的方法
- Git分支高级管理[四]
- Struts2是什么?
- OpenStack云平台网络模式及其工作机制