Python爬虫:scrapy爬取直播图片

举报
彭世瑜 发表于 2021/08/14 01:45:21 2021/08/14
7.4k+ 0 0
【摘要】 通过斗鱼给出的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}

比如:
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))

item.py

# -*- coding: utf-8 -*-

import scrapy

class DouyuItem(scrapy.Item): img_name = scrapy.Field()  # 图片名称 img_link = scrapy.Field()  # 图片链接

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

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/80041174

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。