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多线程下的变量问题
Apr 28 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
python opencv 图像尺寸变换方法
Apr 02 Python
python调用xlsxwriter创建xlsx的方法
May 03 Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 Python
python学生信息管理系统(初级版)
Oct 17 Python
对python周期性定时器的示例详解
Feb 19 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
Python 操作 ElasticSearch的完整代码
Aug 04 Python
Python列表list常用内建函数实例小结
Oct 22 Python
python 数据库查询返回list或tuple实例
May 15 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
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循环跳出的问题
2013/07/01 PHP
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
JavaScript自定义日期格式化函数详细解析
2014/01/14 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
JavaScript如何操作css
2020/10/24 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
使用Python编写Linux系统守护进程实例
2015/02/03 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
深入理解Python中range和xrange的区别
2017/11/26 Python
python各类经纬度转换的实例代码
2019/08/08 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
英国团购网站:Groupon英国
2017/11/28 全球购物
村捐赠仪式答谢词
2014/01/21 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
品德评语大全
2014/05/05 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
分享python函数常见关键字
2022/04/26 Python