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 相关文章推荐
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
详解Python中的变量及其命名和打印
Mar 11 Python
centos6.7安装python2.7.11的具体方法
Jan 16 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
解决paramiko执行命令超时的问题
Apr 16 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
Aug 04 Python
python对批量WAV音频进行等长分割的方法实现
Sep 25 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 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保存信息到当前Session的方法
2015/03/16 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
python实现录音小程序
2020/10/26 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
python顺序执行多个py文件的方法
2019/06/29 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
Python 字符串池化的前提
2020/07/03 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
澳大利亚商务邀请函
2014/01/17 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
2015年大学生工作总结
2015/04/21 职场文书
务工证明怎么写
2015/06/18 职场文书
行政处罚事先告知书
2015/07/01 职场文书
女儿满月酒致辞
2015/07/29 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
python使用shell脚本创建kafka连接器
2022/04/29 Python
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android