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中使用中文的方法
Feb 19 Python
python读取Android permission文件
Nov 01 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
Python面向对象之Web静态服务器
Sep 03 Python
python字典排序的方法
Oct 12 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
Mar 30 Python
pip安装tensorflow的坑的解决
Apr 19 Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 Python
python批量更改目录名/文件名的方法
Apr 18 Python
python实现的人脸识别打卡系统
May 08 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
example1.php
2006/10/09 PHP
给多个地址发邮件的类
2006/10/09 PHP
php curl选项列表(超详细)
2013/07/01 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
prototype1.4中文手册
2006/09/22 Javascript
JavaScript的Function详细
2006/11/14 Javascript
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
Python深入学习之装饰器
2014/08/31 Python
numpy自动生成数组详解
2017/12/15 Python
python下载微信公众号相关文章
2019/02/26 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
《狐假虎威》教学反思
2014/02/07 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
英文自荐信常用句子
2014/03/26 职场文书
大学生工作自荐书
2014/06/16 职场文书
质检员岗位职责范本
2015/04/07 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书