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 socket.error: [Errno 98] Address already in use的原因和解决方法
Aug 25 Python
python的dataframe和matrix的互换方法
Apr 11 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
python在文本开头插入一行的实例
May 02 Python
Python 监测文件是否更新的方法
Jun 10 Python
超简单的Python HTTP服务
Jul 22 Python
python 循环数据赋值实例
Dec 02 Python
Python的形参和实参使用方式
Dec 24 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 Python
Python基于unittest实现测试用例执行
Nov 25 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 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 取得瑞年与平年的天数的代码
2009/08/10 PHP
php session劫持和防范的方法
2013/11/12 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
php实现的生成排列算法示例
2019/07/25 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
房产委托公证书样本
2014/04/04 职场文书
工程材料采购方案
2014/05/18 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
员工工作心得体会
2019/05/07 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
python如何做代码性能分析
2021/04/26 Python