经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python3 » 查看文章
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
来源:jb51  时间:2018/12/6 10:04:25  对本文有异议

本文实例讲述了Python3爬虫爬取英雄联盟高清桌面壁纸功能。分享给大家供大家参考,具体如下:

使用Scrapy爬虫抓取英雄联盟高清桌面壁纸

源码地址:https://github.com/snowyme/loldesk

开始项目前需要安装python3和Scrapy,不会的自行百度,这里就不具体介绍了

首先,创建项目

  1. scrapy startproject loldesk
  2.  

生成项目的目录结构

首先需要定义抓取元素,在item.py中,我们这个项目用到了图片名和链接

  1. import scrapy
  2. class LoldeskItem(scrapy.Item):
  3. name = scrapy.Field()
  4. ImgUrl = scrapy.Field()
  5. pass
  6.  

接下来在爬虫目录创建爬虫文件,并编写主要代码,loldesk.py

  1. import scrapy
  2. from loldesk.items import LoldeskItem
  3. class loldeskpiderSpider(scrapy.Spider):
  4. name = "loldesk"
  5. allowed_domains = ["www.win4000.com"]
  6. # 抓取链接
  7. start_urls = [
  8. 'http://www.win4000.com/zt/lol.html'
  9. ]
  10. def parse(self, response):
  11. list = response.css(".Left_bar ul li")
  12. for img in list:
  13. imgurl = img.css("a::attr(href)").extract_first()
  14. imgurl2 = str(imgurl)
  15. next_url = response.css(".next::attr(href)").extract_first()
  16. if next_url is not None:
  17. # 下一页
  18. yield response.follow(next_url, callback=self.parse)
  19. yield scrapy.Request(imgurl2, callback=self.content)
  20. def content(self, response):
  21. item = LoldeskItem()
  22. item['name'] = response.css(".pic-large::attr(title)").extract_first()
  23. item['ImgUrl'] = response.css(".pic-large::attr(src)").extract()
  24. yield item
  25. # 判断页码
  26. next_url = response.css(".pic-next-img a::attr(href)").extract_first()
  27. allnum = response.css(".ptitle em::text").extract_first()
  28. thisnum = next_url[-6:-5]
  29. if int(allnum) > int(thisnum):
  30. # 下一页
  31. yield response.follow(next_url, callback=self.content)
  32.  

图片的链接和名称已经获取到了,接下来需要使用图片通道下载图片并保存到本地,pipelines.py:

  1. from scrapy.pipelines.images import ImagesPipeline
  2. from scrapy.exceptions import DropItem
  3. from scrapy.http import Request
  4. import re
  5. class MyImagesPipeline(ImagesPipeline):
  6. def get_media_requests(self, item, info):
  7. for image_url in item['ImgUrl']:
  8. yield Request(image_url,meta={'item':item['name']})
  9. def file_path(self, request, response=None, info=None):
  10. name = request.meta['item']
  11. name = re.sub(r'[?\\*|“<>:/()0123456789]', '', name)
  12. image_guid = request.url.split('/')[-1]
  13. filename = u'full/{0}/{1}'.format(name, image_guid)
  14. return filename
  15. def item_completed(self, results, item, info):
  16. image_path = [x['path'] for ok, x in results if ok]
  17. if not image_path:
  18. raise DropItem('Item contains no images')
  19. item['image_paths'] = image_path
  20. return item
  21.  

最后在settings.py中设置存储目录并开启通道:

  1. # 设置图片存储路径
  2. IMAGES_STORE = 'F:/python/loldesk'
  3. #启动pipeline中间件
  4. ITEM_PIPELINES = {
  5. 'loldesk.pipelines.MyImagesPipeline': 300,
  6. }
  7.  

在根目录下运行程序:

  1. scrapy crawl loldesk
  2.  

大功告成!!!一共抓取到128个文件夹

更多关于Python相关内容可查看jb51专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号