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 相关文章推荐
Centos Python2 升级到Python3的简单实现
Jun 21 Python
用python找出那些被“标记”的照片
Apr 20 Python
详解django中url路由配置及渲染方式
Feb 25 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 Python
Python用5行代码实现批量抠图的示例代码
Apr 14 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
May 29 Python
keras.layer.input()用法说明
Jun 16 Python
python 实现两个npy档案合并
Jul 01 Python
Python Pandas数据分析工具用法实例
Nov 05 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
python从ftp获取文件并下载到本地
Dec 05 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 转义使用详解
2013/07/15 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
[05:13]TI4 中国战队 机场出征!!
2014/07/07 DOTA
Python的time模块中的常用方法整理
2015/06/18 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
蔻驰英国官网:COACH英国
2020/07/19 全球购物
护理专业毕业生自我鉴定
2013/10/08 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
学术诚信承诺书
2014/05/26 职场文书
节水口号标语
2014/06/19 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
如何判断pytorch是否支持GPU加速
2021/06/01 Python