Python爬虫:scrapy爬取直播图片
【摘要】 通过斗鱼给出的api,获取json文件,解析出图片地址,可以获取直播间的图片 斗鱼api接口:
http://open.douyucdn.cn/api/RoomApi/live/{num}
1
比如: http://open.douyucdn.cn/api/RoomApi/live/1
当然也可以用这个获取好多妹子的图片,当然也有小哥哥 http://cap...
通过直播平台给出的api,获取json文件,解析出图片地址,可以获取直播间的图片
直播平台api接口:
http://open.douyucdn.cn/api/RoomApi/live/{num}
- 1
比如:
http://open.douyucdn.cn/api/RoomApi/live/1
当然也可以用这个获取好多妹子的图片,当然也有小哥哥
http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset=
项目文件为spider.py、item.py、pipeline.py
spider.py
# -*- coding: utf-8 -*-
# 通过接口,爬取斗鱼图片保存本地
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import scrapy
import os
from douyu_item import DouyuItem
import json
# 图片存储位置,也可以在 settings.py 中统一配置
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
IMAGES_STORE = os.path.join(BASE_DIR, "images")
class DouyuSpider(scrapy.Spider): name = "douyu" allowed_domains = ["douyucdn.cn"] # 设置 图片存储位置 和 处理数据的管道文件 custom_settings = { "IMAGES_STORE": IMAGES_STORE, "ITEM_PIPELINES":{ "myspider.douyu_spider.douyu_pipeline.DouyuPipeline": 100, } } # 接口 # base_url = "http://open.douyucdn.cn/api/RoomApi/live/" base_url = "http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset=" offset = 0 start_urls = [base_url + str(offset)] def parse(self, response): # 解析json文件 datas = json.loads(response.body).get("data") # 停止条件 if datas == []: print "已经没有图片啦" return for data in datas: room_src = data.get("room_src") room_name = data.get("room_name") item = DouyuItem() item["img_name"] = room_name item["img_link"] = room_src yield item # 继续下一页 self.offset += 20 yield scrapy.Request(self.base_url + str(self.offset))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
item.py
# -*- coding: utf-8 -*-
import scrapy
class DouyuItem(scrapy.Item): img_name = scrapy.Field() # 图片名称 img_link = scrapy.Field() # 图片链接
- 1
- 2
- 3
- 4
- 5
- 6
- 7
pipeline.py
# -*- coding: utf-8 -*-
import scrapy
import os
from scrapy.pipelines.images import ImagesPipeline
from myspider.douyu_spider.douyu_spider import images_path
class DouyuPipeline(ImagesPipeline): def get_media_requests(self, item, info): # 返回需要下载的图片链接 img_link = item.get("img_link") yield scrapy.Request(img_link) def item_completed(self, results, item, info): # 将下载完成的图片重命名 print results """ [(True, {'url': 'https://rpic.douyucdn.cn/amrpic-180422/4475021_1048.jpg', 'path': 'full/aa6df7582a33bbe025ec0e3ebd21ff133aa56b36.jpg', 'checksum': 'bc89354a577ee6cf22a7d065859bc990'})] """ image_path = [url["path"] for ok, url in results if ok] odl_path = os.path.join(images_path, image_path[0]) new_path = os.path.join(images_path, item["img_name"]+".jpg") # 重命名 os.rename(odl_path, new_path) return item
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。
原文链接:pengshiyu.blog.csdn.net/article/details/80041174
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)