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 相关文章推荐
用map函数来完成Python并行任务的简单示例
Apr 02 Python
python分析网页上所有超链接的方法
May 08 Python
python使用电子邮件模块smtplib的方法
Aug 28 Python
python 异常处理总结
Oct 18 Python
Python函数式编程
Jul 20 Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
Python中请不要再用re.compile了
Jun 30 Python
python判断变量是否为列表的方法
Sep 17 Python
Python实现FTP文件定时自动下载的步骤
Dec 19 Python
tensorflow+k-means聚类简单实现猫狗图像分类的方法
Apr 28 Python
python异步的ASGI与Fast Api实现
Jul 16 Python
Python Matplotlib库实现画局部图
Nov 17 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原理之Session Gc的一个小概率Notice
2011/04/12 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
对于Python的Django框架部署的一些建议
2015/04/09 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
python机器学习之随机森林(七)
2018/03/26 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
python中yield的用法详解
2021/01/13 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
个人简历中的自我评价范例
2013/10/29 职场文书
新闻系毕业生推荐信
2013/11/16 职场文书
酒店前台接待岗位职责
2013/12/03 职场文书
单位在职证明范本
2014/01/09 职场文书
公司借条范本
2015/05/25 职场文书
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS