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中操作时间之strptime()方法的使用
Dec 30 Python
windows下ipython的安装与使用详解
Oct 20 Python
Python实现读取json文件到excel表
Nov 18 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
python是否适合网页编程详解
Oct 04 Python
Python实现Word表格转成Excel表格的示例代码
Apr 16 Python
python三引号如何输入
Jul 06 Python
详解KMP算法以及python如何实现
Sep 18 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
Jan 09 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
Chrome Web App开发小结
2014/09/04 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
javascript学习之闭包分析
2010/12/02 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
python列表去重的二种方法
2014/02/14 Python
Python中函数的用法实例教程
2014/09/08 Python
python通过文件头判断文件类型
2015/10/30 Python
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
浅析python标准库中的glob
2020/03/13 Python
如何用Django处理gzip数据流
2021/01/29 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
UNIX命令速查表
2012/03/10 面试题
营销与策划应届生求职信
2013/11/04 职场文书
个人近期表现材料
2014/02/11 职场文书
水电站项目建议书
2014/05/12 职场文书
2014年宣传工作总结
2014/11/18 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL