Python爬虫:scrapy爬取直播图片

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

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

全部回复

上滑加载中

设置昵称

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

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

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