分析目标

爬取的是斗鱼主播头像,示范使用的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 scrapy

class 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 DouyuItem class DouyuspiderSpider(scrapy.Spider):
name = "DouyuSpider"
allowed_domains = ["douyucdn.cn"]
baseURL = 'http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset='
offset = 0
start_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):
return for data in data_list:
item = DouyuItem()
item['nickname'] = data['nickname']
item['imagelink'] = data['vertical_src']
yield item self.offset += 20
yield 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. 『Scrapy』爬取腾讯招聘网站

    分析爬取对象 初始网址, http://hr.tencent.com/position.php?@start=0&start=0#a (可选)由于含有多页数据,我们可以查看一下这些网址有什么相 ...

  2. 爬虫之selenium爬取斗鱼主播图片

    这是我GitHub上简单的selenium介绍与简单使用:https://github.com/bwyt/spider/tree/master/selenium%E5%9F%BA%E7%A1%80 & ...

  3. selenium,webdriver爬取斗鱼主播信息 实操

    from selenium import webdriver import time from bs4 import BeautifulSoup class douyuSelenium(): #初始化 ...

  4. python实战之原生爬虫(爬取熊猫主播排行榜)

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

  5. 『Python』 爬取 WooYun 论坛所有漏洞条目的相关信息

    每个漏洞条目包含: 乌云ID,漏洞标题,漏洞所属厂商,白帽子,漏洞类型,厂商或平台给的Rank值 主要是做数据分析使用:可以分析某厂商的各类型漏洞的统计:或者对白帽子的能力进行分析..... 数据更新 ...

  6. Scrapy:虎牙爬取,图片存储与数据分析

    第一次爬取虎牙主播数据,有点小激动 1.共批量爬取的101个主播的,包括 头像 主播名字 房间号 房间链接 2.数据规整部分,需要将json数据加载到pandas的Dataframe,只显示的前15个 ...

  7. 【爬虫小程序:爬取斗鱼所有房间信息】Xpath

    # 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正from selenium import webdriver import time class Douyu: "&q ...

  8. 用Python爬取斗鱼网站的一个小案例

    思路解析: 1.我们需要明确爬取数据的目的:为了按热度查看主播的在线观看人数 2.浏览网页源代码,查看我们需要的数据的定位标签 3.在代码中发送一个http请求,获取到网页返回的html(需要注意的是 ...

  9. 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息

    简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 系统环境:Fedora22(昨天已安装scrapy环境) 爬取的开始URL:ht ...

随机推荐

  1. linux服务器---代理认证

    代理认证 proxy代理服务被广泛的使用,为了安全起见,可以在服务器上增加一层安全认证机制.这里使用htpasswd建立认证账号和密码 1.创建认证账号和密码 [root@localhost wj]# ...

  2. Js基础知识4-函数的三种创建、四种调用(及关于new function()的解释)

    在js中,函数本身属于对象的一种,因此可以定义.赋值,作为对象的属性或者成为其他函数的参数.函数名只是函数这个对象类的引用. 函数定义 // 函数的三种创建方法(定义方式) function one( ...

  3. Js基础知识2-对象、对象属性全解

    Object对象 Object对象包含如下属性和方法,也就意味着一切对象(函数也是对象)都包含如下方法. 每种方法和属性在不同的对象中有不同的作用,并不是每种对象都有使用每个方法的必要. 下面是Obj ...

  4. 编写第一个微信小程序界面

    编写第一个微信小程序界面 不忘初心,方得始终:初心易得,始终难守. 传统的 web 结构 小程序文件目录结构 小程序页面层级结构 编写第一个小程序 1. 创建小程序目录结构 2. 编写代码 welco ...

  5. leetcode 136 Single Number, 260 Single Number III

    leetcode 136. Single Number Given an array of integers, every element appears twice except for one. ...

  6. 20145206邹京儒 Exp8 Web基础

    20145206邹京儒 Exp8 Web基础 一.实践过程记录 Apache (一)环境配置 1.查看端口占用:在这里apach2占用端口80 2.测试apache是否正常工作:在kali的火狐浏览器 ...

  7. C# 判断网络文件是否存在

    #region 判断网络文件是否存在 //bool result = false;//下载结果 //string fileUrl = "http://localhost:7070/FileU ...

  8. nohup 日志切割

    最近遇到日志切割的问题,即程序是通过命令: nohup python *.py & 放到后台执行的,这样程序的日志输出到了nohup自动生成的nohup.out文件. 问题就来了,nohup. ...

  9. MYSQL语句:创建、授权、查询、修改、统计分析等 一 用户的创建、权限设置、删除等

    MYSQL语句:创建.授权.查询.修改.统计分析.. 一.用户的创建.权限设置.删除等 1.首先链接MySQL操作 连接格式:mysql -h 主机地址 -u 用户名 -p 用户密码 (注-u与roo ...

  10. 纯CSS实现一个微信logo,需要几个标签?

    博客已迁移至http://lwzhang.github.io. 纯CSS实现一个微信logo并不难,难的是怎样用最少的html标签实现.我一直在想怎样用一个标签就能实现,最后还是没想出来,就只好用两个 ...