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 subprocess模块学习总结
Mar 13 Python
python单例模式实例分析
Apr 08 Python
Python实现文件复制删除
Apr 19 Python
python常见的格式化输出小结
Dec 15 Python
Python docx库用法示例分析
Feb 16 Python
Python  Django 母版和继承解析
Aug 09 Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
Python命令行click参数用法解析
Dec 19 Python
python实现飞船游戏的纵向移动
Apr 24 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
Python字符串的转义字符
Apr 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
Terran魔法科技
2020/03/14 星际争霸
php中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
php实现网站留言板功能
2015/11/04 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
Python实现KNN邻近算法
2021/01/28 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
python psutil模块使用方法解析
2019/08/01 Python
YUV转为jpg图像的实现
2019/12/09 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
土木工程毕业生自荐信
2013/09/21 职场文书
摄影助理岗位职责
2014/02/07 职场文书
大专学生求职信
2014/07/04 职场文书
商场促销活动策划方案
2014/08/18 职场文书
综治工作汇报材料
2014/10/27 职场文书
父亲节寄语大全
2015/02/27 职场文书
教师工作表现自我评价
2015/03/05 职场文书
同事离别感言
2015/08/04 职场文书
队名及霸气口号大全
2015/12/25 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
Python Pandas常用函数方法总结
2021/06/15 Python
浅析MongoDB之安全认证
2021/06/26 MongoDB
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js