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模块之time模块(实例讲解)
Sep 13 Python
python中的随机函数小结
Jan 27 Python
python web基础之加载静态文件实例
Mar 20 Python
Python开发网站目录扫描器的实现
Feb 21 Python
Django框架模板的使用方法示例
May 25 Python
Python QQBot库的QQ聊天机器人
Jun 19 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
TensorFlow 显存使用机制详解
Feb 03 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
Python通过字典映射函数实现switch
Nov 06 Python
python两种获取剪贴板内容的方法
Nov 06 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语法(2)
2006/10/09 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
在Python中使用正则表达式的方法
2015/08/13 Python
python查看模块安装位置的方法
2018/10/16 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
python同步windows和linux文件
2019/08/29 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
高一历史教学反思
2014/01/13 职场文书
经销商培训邀请函
2014/01/21 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
优秀班主任申报材料
2014/12/16 职场文书