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 22 Python
举例详解Python中threading模块的几个常用方法
Jun 18 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 Python
Python文本处理之按行处理大文件的方法
Apr 09 Python
基于树莓派的语音对话机器人
Jun 17 Python
Python何时应该使用Lambda函数
Jul 02 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
python 的topk算法实例
Apr 02 Python
快速解决pymongo操作mongodb的时区问题
Dec 05 Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 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获取某个目录大小的代码
2008/09/10 PHP
PHP中使用BigMap实例
2015/03/30 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
js获得参数的getParameter使用示例
2014/02/26 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
Python 命令行非阻塞输入的小例子
2013/09/27 Python
python使用urlparse分析网址中域名的方法
2015/04/15 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
tensorflow识别自己手写数字
2018/03/14 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
tensorflow 变长序列存储实例
2020/01/20 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
十二生肖观后感
2015/06/12 职场文书
十七岁的单车观后感
2015/06/12 职场文书
员工离职证明范本
2015/06/12 职场文书
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL