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 23 Python
Python的函数的一些高阶特性
Apr 27 Python
python基于Tkinter库实现简单文本编辑器实例
May 05 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
postman和python mock测试过程图解
Feb 22 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
基于Keras的格式化输出Loss实现方式
Jun 17 Python
python如何进入交互模式
Jul 06 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 Python
Python趣味实战之手把手教你实现举牌小人生成器
Jun 07 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与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
js 字符串转换成数字的三种方法
2013/03/23 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
Python 实现异步调用函数的示例讲解
2018/10/14 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
python中如何进行连乘计算
2020/05/28 Python
django创建css文件夹的具体方法
2020/07/31 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
PHP面试题集
2016/12/18 面试题
趣味游戏活动方案
2014/02/07 职场文书
白血病募捐倡议书
2014/05/14 职场文书
2015年学校精神文明工作总结
2015/05/27 职场文书
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏