分析目标

爬取的是斗鱼主播头像,示范使用的URL似乎是个移动接口(下文有提到),理由是网页主页属于动态页面,爬取难度陡升,当然爬取斗鱼主播头像这么恶趣味的事也不是我的兴趣......

目标URL如下,

http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset=150

这是一个json形式文件(所谓json形式的文件实际就是把字典作为字符串保存起来),limit参数表示一次加载多少条目,offset表示偏移量,即加载的第一条项目相对于初始条目的位次数。

形式如下(这不是查看源码,而是数据本身就是这样,好像是个移动端接口),

形式和我之前保存的json相同,是字典的格式,key有error和data,data的value是list,中间的元素是房间的信息dict,这里列举了前两个房间。

我们需要爬取的是主播名字('nickname')和头像('vertical_src')。

item

import scrapyclass DouyuItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()nickname = scrapy.Field()imagelink = scrapy.Field()

  

spider

这里使用了json包的方法去解析str字符串为dict。

import scrapy
import json
from douyu.items import DouyuItemclass DouyuspiderSpider(scrapy.Spider):name = "DouyuSpider"allowed_domains = ["douyucdn.cn"]baseURL = 'http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset='offset = 0start_urls = [baseURL + str(offset)]def parse(self, response):# .load和磁盘交互,.loads处理字符串data_list = json.loads(response.body.decode('utf-8'))['data']if not len(data_list):returnfor data in data_list:item = DouyuItem()item['nickname'] = data['nickname']item['imagelink'] = data['vertical_src']yield itemself.offset += 20yield scrapy.Request(self.baseURL + str(self.offset), callback=self.parse)

  

pipelines

取消settings.py注释,

这里面我们继承了一个新的用于下载二进制文件的管线类,并改写了两个方法,用于,

  • 下载二进制文件
  • 根据下载结果(成功与否)将图片重命名为主播名

下载文件的方法会自动读取settings.py的字段,而且这个字段默认setting.py是没有的,所以需要在文件中手动添加,位置无所谓,

import os
import scrapy
from scrapy.pipelines.images import ImagesPipeline
from douyu.settings import IMAGES_STORE# 新的管线类,用于处理二进制文件
class DouyuPipeline(ImagesPipeline):# 二进制下载,电影视频实际都可以,会自动调用download模组的函数def get_media_requests(self, item, info):image_link = item['imagelink']yield scrapy.Request(image_link)# 这个方法会在一次处理的最后调用(从返回item也可以推理出)# result表示下载的结果状态def item_completed(self, results, item, info):# print(results)# [(True, {'url': 'https://rpic.douyucdn.cn/acrpic/170827/3034164_v1319.jpg',# 'checksum': '7383ee5f8dfadebf16a7f123bce4dc45', 'path': 'full/6faebfb1ae66d563476449c69258f2e0aa24000a.jpg'})]image_path = [x['path'] for ok,x in results if ok]os.rename(IMAGES_STORE + image_path[0], IMAGES_STORE + item['nickname'] + '.jpg')return item

重命名函数os.rename比win下的重命名强多了,它可以对路径重命名达到修改文件位置的功效(内部原理贴近操作系统层面了,到底是os库的函数233)。

运行如下命令,

scrapy crawl DouyuSpider

结束即可查看图片,结果和下面类似,

『Scrapy』爬取斗鱼主播头像相关推荐

  1. 使用selenium,xpath,线程池爬取斗鱼主播信息

    使用xpath,线程池爬取斗鱼主播信息: 主要爬取主播昵称,直播内容分类,房间名称,房间号以及人气,共爬取了大概110多页数据,大概15000条,保存在txt文本中, import timefrom ...

  2. python爬取斗鱼主播图片

    今天闲来无事,爬取一下斗鱼女主播的图片,之前学习scrapy的时候写过一个找不到了,今天使用requests和bs4重新写了一份,闲话不多说,直奔主题. 首先用Chrome浏览器访问斗鱼官网: 当然是 ...

  3. python爬取斗鱼主播图片_F_hawk189_新浪博客

    今天闲来无事,爬取一下斗鱼女主播的图片,之前学习scrapy的时候写过一个找不到了,今天使用requests和bs4重新写了一份,闲话不多说,直奔主题. 首先用Chrome浏览器访问斗鱼官网: 当然是 ...

  4. 利用xpath爬取斗鱼主播热度和房间标题

    import requests import pandas as pd from bs4 import BeautifulSoup import os import time import rando ...

  5. 使用python爬取虎牙主播直播封面图片(scrapy)

    目的:使用Scrapy框架爬取虎牙主播直播封面图片 Scrapy(通过pip 安装Scrapy框架pip install Scrapy)和Python3.x安装教程可自行寻找教程安装,这里默认在Win ...

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

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

  7. 爬取虎牙主播,免费爬些想看的东西,咳咳(为什么要学python?)

    废话不多说,咱直接上代码: """ 导入相关的包(功能模块) """import requests #用来在代码里代替浏览器发送网络请求 f ...

  8. Python爬取美女主播图片适合初学者

    Python爬取虎牙女主播图片,非常适合初学者,代码少,思路清晰 开发环境Pycharm import time import requests from lxml import etree from ...

  9. scrapy框架爬取斗鱼女主播照片,依据颜值排行榜

    spider爬虫文件 douyugirl.py # -*- coding: utf-8 -*- import scrapy import json from douyu.items import Do ...

  10. python熊猫小课成果_python实战之原生爬虫(爬取熊猫主播排行榜)

    """ this is a module,多行注释 """ import re from urllib import request # B ...

最新文章

  1. 领英2017报告:机器学习、大数据工程师成为最热门的新兴职业
  2. mysql 1146错误
  3. 大数高精加减乘除(洛谷P1601、P2142、P1303、P1480题题解,Java语言描述)
  4. 重温C++之“strcpy_s与strcpy的比较”
  5. mysql-存储过程 使用游标获取数据集并且操作
  6. python练习题及答案-python编程练习题和答案.doc
  7. 宝峰uv5r保存信道频率_宝峰UV-5R上中继台的信道存储设置方法
  8. 英语写作技巧 ——“李靖“
  9. bzoj 2763:[JLOI2011]飞行路线(luogu 4568)
  10. 好消息:GAX/GAT February 2008 Final Release
  11. Cinder调度之Filter介绍
  12. python基本类型关键字_python基本类型关键字_python中的关键字---1(基础数据类)...
  13. python怎么设置随机数种子_python实验随机种子的设置
  14. oracle 天转换成月函数_oracle日期函数,转换函数
  15. 从Spring源码探究AOP代码织入的过程
  16. 本人新开的一个人才网站,玉环人力网
  17. Python数据分析与可视化概述(内容全面 附PPT)
  18. ImportError: DLL load failed while importing _openmp_helpers: 拒绝访问。sklearn库拒绝访问
  19. 手机网络邻居访问电脑_通过WiFi局域网在手机上观看电脑上的视频
  20. Python—PEP8规范

热门文章

  1. 天翼云服务器80、443等特殊端口无法访问原因记录
  2. java8日期加减_JDK 8 三种时间获取方法 日期加减
  3. 大小和尚共有100人php,古今诗趣(一)· 数字诗
  4. V-by-One基础知识
  5. 新颖的自我介绍_有创意的自我介绍10篇
  6. SPSS实现距离分析
  7. Web版RSS阅读器(一)——dom4j读取xml(opml)文件
  8. 计算机无法登陆提示rpc服务器不可用,电脑提示RPC服务器不可用的解决方法
  9. 阿里云DataV数据可视化工具的简单使用与地图组件区域下钻热力图下钻上钻控制缩放比例demo
  10. attiny85(digispark)零延迟启动探究