文章来源: 敏而好学论坛 嗨学网www.piaodoo.com 欢迎大家相互学习

分析

分析网站寻找需要的网址

用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图:

在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图:

圈住的部分是我们需要的数据,然后复制它的网址为https://www.douyu.com/gapi/rknc/directory/yzRec/1,出于学习目的只爬取第一页(减少服务器压力)。然后把网址放到浏览器中测试是否可以访问。如图:

结果正常。

分析json数据,提取图片链接

最后分析发现json中的data里面的rl是每个房间的信息,大概有200条左右,拿出其中的一条查询里面的图片链接。

{"rid": 1282190,"rn": "大家要开心啊~","uid": 77538371,"nn": "鲸鱼欧尼","cid1": 8,"cid2": 201,"cid3": 581,"iv": 1,"av": "avatar_v3/201908/d62c503c603945098f2c22d0d95c3b2e","ol": 610574,"url": "/1282190","c2url": "/directory/game/yz","c2name": "颜值","icdata": {"217": {"url": "https://sta-op.douyucdn.cn/dy-listicon/king-web.png-v3.png","w": 0,"h": 0}},"dot": 2103,"subrt": 0,"topid": 0,"bid": 0,"gldid": 0,"rs1": "https://rpic.douyucdn.cn/live-cover/appCovers/2019/08/01/1282190_20190801002745_big.jpg/dy1","rs16": "https://rpic.douyucdn.cn/live-cover/appCovers/2019/08/01/1282190_20190801002745_small.jpg/dy1","utag": [{"name": "呆萌鲸鱼","id": 111405},{"name": "美美美","id": 41},{"name": "萌萌哒","id": 520},{"name": "刀神老婆","id": 132367}],"rpos": 0,"rgrpt": 1,"rkic": "","rt": 2103,"ot": 0,"clis": 1,"chanid": 0,"icv1": [[{"id": 217,"url": "https://sta-op.douyucdn.cn/dy-listicon/web-king-1-10-v3.png","score": 994,"w": 0,"h": 0}],[
      ],[],[]],"ioa": 0,"od": ""}</pre>

测试发现rs16是房间的图片,如果把链接最后的/dy1去掉的话,图片就成大图了,心里美滋滋。

代码实现

import gevent
import json
from urllib import request
from gevent import monkey
# 使用gevent打补丁,耗时操作自动替换成gevent提供的模块
monkey.patch_all()
# 图片存放的目录
ROOT = "./images/"
# 设置请求头,防止被反爬虫的第一步
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 "
}

def download(img_src):

把每个链接最后的/dy1去掉

img_src: str = img_src.replace("/dy1", “”)

提取图片名

file_name: str = img_src.split("/")[-1]
response = request.urlopen(request.Request(img_src, headers=header))

保存到本地

with open(ROOT + file_name, “wb”) as f:
f.write(response.read())
print(file_name, “下载完成!”)
if name == ‘main’:

req = request.Request(“https://www.douyu.com/gapi/rknc/directory/yzRec/1”, headers=header)

把json数据转换成python中的字典

json_obj = json.loads(request.urlopen(req).read().decode(“utf-8”))
tasks = []
for src in json_obj[“data”][“rl”]:
tasks.append(gevent.spawn(download, src[“rs16”]))

开始下载图片

gevent.joinall(tasks)

结果

由于使用的是协程,比线程效率更高,不到1秒就把第一页的图片全部爬取下来了。效果如图:

此案例仅用于学习gevent的使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

                    <p><p></td></tr></table>

原文地址是:http://www.piaodoo.com/thread-13693-1-9.html

python协程gevent案例 爬取斗鱼图片过程解析 - python相关推荐

  1. python从网址爬图片协程_python协程gevent案例 爬取斗鱼图片过程解析

    分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要 ...

  2. python协程gevent案例:爬取斗鱼美女图片

    分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要 ...

  3. Python3 协程 + 正则 批量爬取斗鱼美女图片

    from urllib import request from gevent import monkey import random import re import geventmonkey.pat ...

  4. 使用单线程,多线程,协程,异步爬取包图网大国工匠视频

    使用单线程爬取,多线程,协程爬取,异步爬取包图网视频 文章目录 使用单线程爬取,多线程,协程爬取,异步爬取包图网视频 第一步使用单线程爬取包图网视频 多线程爬取视频 用协程爬取 基于协程的异步爬取 第 ...

  5. 利用python爬虫爬取斗鱼图片(简单详细)

    关于 在一个安静的夜晚,我缓慢的打开了电脑,望着已经睡着的父母,我轻轻的把门关上,看着斗鱼颜值主播的魅力,我不尽感叹,要是每天都可以不需要那么麻烦的去看那该有多好! 于是我想起了最近刚学的爬虫,嘴角露 ...

  6. 使用scrapy框架爬取斗鱼图片

    使用scrapy框架爬取斗鱼图片 首先我们先认识一下框架 scrapy-Scrapy是Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scr ...

  7. python爬取bilibili弹幕_Python爬虫爬取Bilibili弹幕过程解析

    先来思考一个问题,B站一个视频的弹幕最多会有多少? 比较多的会有2000条吧,这么多数据,B站肯定是不会直接把弹幕和这个视频绑在一起的. 也就是说,有一个视频地址为https://www.bilibi ...

  8. python刷直播人气_python3爬取斗鱼某些版块的主播人气

    python 3爬取斗鱼某些版块的主播人气 1.爬虫版块 import Test3 import urllib.request from bs4 import BeautifulSoup import ...

  9. python爬虫入门教程:爬取网页图片

    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的.而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程: 准备工作 语言:python IDE:py ...

最新文章

  1. CHM综述:建立因果关系,合成菌群在植物菌群研究中的机会
  2. mingw控制台中文乱码
  3. MySql——安装与配置与启动和停止
  4. MySQL事务控制语句
  5. linux文件夹打包命令
  6. CentOS 7 Linux 的初始化系统(系统服务管理和控制程序/Init System) -- systemd 详解
  7. 【HDU - 5744 】Keep On Movin (回文串性质,贪心思维,不是水题)
  8. Unity2018.2中文更新日志速览版
  9. top -bcn -1
  10. 在mysql中修改表名的sql语句
  11. 软件工程第1次阅读作业
  12. 更换app图标和名称
  13. python辛普森积分_辛普森在Python中的规则
  14. Python视频字幕识别——pytesseract
  15. Emmagee—开源Android性能测试工具
  16. [学习]简易搜索引擎的制作
  17. 赋值具有的非单一 rhs 维度多于非单一下标数错误的分析和解决方法
  18. 西电李航 操作系统课程笔记 day8 Implementation of File system
  19. 游戏开发常用工具总结
  20. R语言 Scale函数

热门文章

  1. python如何输出结果至剪贴板_将“print”的输出直接复制到剪贴板
  2. 《MySQL必知必会》学习笔记——组合查询、全文本搜索
  3. wince 百度地图懒人包_【分享】路虎高德V6.0+V33图资懒人包(WIN CE)【亲测】
  4. CTO、技术VP、技术总监、首席架构师
  5. alpine linux中安装docker
  6. 求Geohash编码周围的8个编码
  7. oracle中 ''dual'' 的含义
  8. Bootstrap-CL:标签
  9. altera fpga 型号说明_ALTERA的FPGA命名规则(转载)
  10. CSP2020考试感悟