Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】


Posted in Python onDecember 05, 2018

本文实例讲述了Python3爬虫爬取英雄联盟高清桌面壁纸功能。分享给大家供大家参考,具体如下:

使用Scrapy爬虫抓取英雄联盟高清桌面壁纸

源码地址:https://github.com/snowyme/loldesk

开始项目前需要安装python3和Scrapy,不会的自行百度,这里就不具体介绍了

首先,创建项目

scrapy startproject loldesk

生成项目的目录结构

Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】

首先需要定义抓取元素,在item.py中,我们这个项目用到了图片名和链接

import scrapy
class LoldeskItem(scrapy.Item):
  name = scrapy.Field()
  ImgUrl = scrapy.Field()
  pass

接下来在爬虫目录创建爬虫文件,并编写主要代码,loldesk.py

import scrapy
from loldesk.items import LoldeskItem
class loldeskpiderSpider(scrapy.Spider):
  name = "loldesk"
  allowed_domains = ["www.win4000.com"]
  # 抓取链接
  start_urls = [
    'http://www.win4000.com/zt/lol.html'
  ]
  def parse(self, response):
    list = response.css(".Left_bar ul li")
    for img in list:
      imgurl = img.css("a::attr(href)").extract_first()
      imgurl2 = str(imgurl)
      next_url = response.css(".next::attr(href)").extract_first()
      if next_url is not None:
        # 下一页
        yield response.follow(next_url, callback=self.parse)
      yield scrapy.Request(imgurl2, callback=self.content)
  def content(self, response):
    item = LoldeskItem()
    item['name'] = response.css(".pic-large::attr(title)").extract_first()
    item['ImgUrl'] = response.css(".pic-large::attr(src)").extract()
    yield item
    # 判断页码
    next_url = response.css(".pic-next-img a::attr(href)").extract_first()
    allnum = response.css(".ptitle em::text").extract_first()
    thisnum = next_url[-6:-5]
    if int(allnum) > int(thisnum):
      # 下一页
      yield response.follow(next_url, callback=self.content)

图片的链接和名称已经获取到了,接下来需要使用图片通道下载图片并保存到本地,pipelines.py:

from scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItem
from scrapy.http import Request
import re
class MyImagesPipeline(ImagesPipeline):
  def get_media_requests(self, item, info):
    for image_url in item['ImgUrl']:
      yield Request(image_url,meta={'item':item['name']})
  def file_path(self, request, response=None, info=None):
    name = request.meta['item']
    name = re.sub(r'[?\\*|“<>:/()0123456789]', '', name)
    image_guid = request.url.split('/')[-1]
    filename = u'full/{0}/{1}'.format(name, image_guid)
    return filename
  def item_completed(self, results, item, info):
    image_path = [x['path'] for ok, x in results if ok]
    if not image_path:
      raise DropItem('Item contains no images')
    item['image_paths'] = image_path
    return item

最后在settings.py中设置存储目录并开启通道:

# 设置图片存储路径
IMAGES_STORE = 'F:/python/loldesk'
#启动pipeline中间件
ITEM_PIPELINES = {
  'loldesk.pipelines.MyImagesPipeline': 300,
}

在根目录下运行程序:

scrapy crawl loldesk

大功告成!!!一共抓取到128个文件夹

Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现截屏的函数
Jul 25 Python
Python3使用requests发闪存的方法
May 11 Python
python3获取两个日期之间所有日期,以及比较大小的实例
Apr 08 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
Sep 17 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
如何通过雪花算法用Python实现一个简单的发号器
Jul 03 Python
python游戏开发的五个案例分享
Mar 09 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 Python
7个关于Python的经典基础案例
Nov 07 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 #Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
Dec 05 #Python
python3 实现对图片进行局部切割的方法
Dec 05 #Python
python中强大的format函数实例详解
Dec 05 #Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 #Python
解决Python3.5+OpenCV3.2读取图像的问题
Dec 05 #Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 #Python
You might like
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
php中switch语句用法详解
2015/08/17 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
诉前财产保全担保书
2014/05/20 职场文书
电子商务专业自荐信
2014/06/02 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
党员一帮一活动总结
2014/07/08 职场文书
校外活动方案
2014/08/28 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
Java 数据结构七大排序使用分析
2022/04/02 Java/Android
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
Python实现仓库管理系统
2022/05/30 Python