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实现爬取千万淘宝商品的方法
Jun 30 Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 Python
如何实现删除numpy.array中的行或列
May 08 Python
深入浅析python 中的匿名函数
May 21 Python
python指定写入文件时的编码格式方法
Jun 07 Python
python 3.6.2 安装配置方法图文教程
Sep 18 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
Jan 14 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
Python自省及反射原理实例详解
Jul 06 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 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中的静态变量的基本用法
2014/03/20 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
jquery连缀语法如何实现
2012/11/29 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
layui文件上传实现代码
2017/05/20 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
2020/08/22 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
Python中列表与元组的乘法操作示例
2018/02/10 Python
python爬取微信公众号文章
2018/08/31 Python
python的继承知识点总结
2018/12/10 Python
python可视化实现代码
2019/01/15 Python
简单了解python变量的作用域
2019/07/30 Python
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
建筑设计所实习生自我鉴定
2013/09/25 职场文书
四风对照检查材料范文
2014/09/27 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
财务个人年度总结范文
2015/02/26 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
JavaScript异步操作中串行和并行
2021/11/20 Javascript
django中websocket的具体使用
2022/01/22 Python
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android