当前位置: 首页 > news >正文

爬取斗鱼图片

创建项目
scrapy startproject douyu

编写items.py

1 import scrapy
2 
3 class DouyuItem(scrapy.Item):
4     nickname = scrapy.Field()
5     imagelink = scrapy.Field()
6     imagePath = scrapy.Field()

创建基础类的爬虫

scrapy genspider douyutupian capi.douyucdn.cn

 

手机抓包得到API接口,返回JSON格式数据

douyutupian.py

 1 import scrapy
 2 from douyu.items import DouyuItem
 3 import json
 4 
 5 
 6 class DouyumeinvSpider(scrapy.Spider):
 7     name = "douyutupian"
 8     allowed_domains = ["capi.douyucdn.cn"]
 9 
10     offset = 0
11     url = "http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset="
12 
13     start_urls = [url + str(offset)]
14 
15     def parse(self, response):
16         # 把json格式的数据转换为python格式,data段是列表
17         data = json.loads(response.text)["data"]
18         for each in data:
19             item = DouyuItem()
20             item["nickname"] = each["nickname"]
21             item["imagelink"] = each["vertical_src"]
22 
23             yield item
24 
25         self.offset += 20
26         yield scrapy.Request(self.url + str(self.offset), callback = self.parse)

管道文件
pipelines.py

 1 import scrapy
 2 from scrapy.utils.project import get_project_settings
 3 from scrapy.pipelines.images import ImagesPipeline
 4 import os
 5 
 6 class ImagesPipeline(ImagesPipeline):
 7     #def process_item(self, item, spider):
 8     #    return item
 9     # 获取settings文件里设置的变量值
10     IMAGES_STORE = get_project_settings().get("IMAGES_STORE")
11 
12     def get_media_requests(self, item, info):
13         image_url = item["imagelink"]
14         yield scrapy.Request(image_url)
15 
16     def item_completed(self, result, item, info):
17         image_path = [x["path"] for ok, x in result if ok]
18 
19         os.rename(self.IMAGES_STORE + "/" + image_path[0], self.IMAGES_STORE + "/" + item["nickname"] + ".jpg")
20 
21         item["imagePath"] = self.IMAGES_STORE + "/" + item["nickname"]
22 
23         return item

 

 

settings.py
 1 BOT_NAME = 'douyu'
 2 
 3 SPIDER_MODULES = ['douyu.spiders']
 4 NEWSPIDER_MODULE = 'douyu.spiders'
 5 
 6 DEFAULT_REQUEST_HEADERS = {
 7     "User-Agent" : "DYZB/1 CFNetwork/808.2.16 Darwin/16.3.0"
 8 }
 9 
10 ITEM_PIPELINES = {
11     'douyu.pipelines.ImagesPipeline': 300,
12 }
13 
14 IMAGES_STORE = "IMAGES_STORE = "../../Images"

 

转载于:https://www.cnblogs.com/wanglinjie/p/9240373.html

相关文章:

  • linux学习,网络故障排查
  • 微服务概念
  • 开发者论坛一周精粹(第四十八期) ICP经营许可证办理流程
  • 如何禁止JavaScript对象重写?
  • 收藏~软件测试相关工具汇总
  • Redux 知识点梳理和实践
  • jquery-12 jquery的ajax如何使用
  • python学习之老男孩python全栈第九期_day003作业
  • python图像处理模块Pillow的学习
  • Django数据库
  • 【leetcode】403. Frog Jump
  • MongoDB安装运行
  • Python3学习笔记1,基本数据类型-Number、str
  • TenxCloud Microservice,时速云“三级火箭”之微服务治理
  • Nginx 启动出错 error while loading shared libraries: libpcre.so.1
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [译] 怎样写一个基础的编译器
  • 【css3】浏览器内核及其兼容性
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 0基础学习移动端适配
  • ES6 ...操作符
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Less 日常用法
  • quasar-framework cnodejs社区
  • Redux 中间件分析
  • socket.io+express实现聊天室的思考(三)
  • Twitter赢在开放,三年创造奇迹
  • Vue 重置组件到初始状态
  • vue:响应原理
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 给第三方使用接口的 URL 签名实现
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 扑朔迷离的属性和特性【彻底弄清】
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用Swoole加速Laravel(正式环境中)
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​iOS安全加固方法及实现
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • (3)选择元素——(17)练习(Exercises)
  • (a /b)*c的值
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (二)学习JVM —— 垃圾回收机制
  • (十一)c52学习之旅-动态数码管
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET建议使用的大小写命名原则
  • .net中应用SQL缓存(实例使用)
  • /*在DataTable中更新、删除数据*/
  • @Resource和@Autowired的区别