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实现简单过滤文本段的方法
May 24 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
python实现弹跳小球
May 13 Python
python3射线法判断点是否在多边形内
Jun 28 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
python颜色随机生成器的实例代码
Jan 10 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
pycharm的python_stubs问题
Apr 08 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
详细介绍python类及类的用法
May 31 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
PHP 存储文本换行实现方法
2010/01/05 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
javascript几个易错点记录
2014/11/26 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
mpvue实现左侧导航与右侧内容的联动
2019/10/21 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
前端性能优化建议
2020/09/17 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
Python实现简单的语音识别系统
2017/12/13 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
节能减耗标语
2014/06/21 职场文书
财务务虚会发言材料
2014/10/20 职场文书
办公用品质量保证书
2015/05/11 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书