Scrapy+Selenium切换iframe抓取网易云音乐排行榜

  • iframe标签
  • Selenium (WEB自动化工具)
  • Scrapy 框架

iframe标签

  • 了解一下iframe
    百度百科介绍的iframe
  • 网易云音乐的iframe标签如图所示:

Selenium (WEB自动化工具)

  • selenium爬虫
    百度百科介绍的selenium
    selenium官网
  • 有疑惑的同学可以了解一下博主的这篇文章
    python3+selenium爬取京东笔记本电脑详情信息

Scrapy 框架

  • Scrapy
  • Scrapy 2.3.0 文档
  • Scrapy 概述

异步处理框架,可配置和可扩展程度非常高,Python中使用最广泛的爬虫框架

  • Scrapy的安装
  • linux安装

sudo pip3 install Scrapy

  • Windows安装

python - m pip install Scrapy

  • Scrapy组件及流程
引擎(Engine)----------整个框架核心
爬虫程序(Spider)------数据解析提取
调度器(Scheduler)-----维护请求队列
下载器(Downloader)----获取响应对象
管道文件(Pipeline)-----数据入库处理【两个中间件】下载器中间件(Downloader Middlewares)引擎->下载器,包装请求(随机代理等)蜘蛛中间件(Spider Middlewares)引擎->爬虫文件,可修改响应对象属性
  • 图解:
  • Scrapy爬虫工作流程
  1. 爬虫项目启动,由引擎向爬虫程序索要第一批要爬取的URL,交给调度器去入队列
  2. 调度器处理请求后出队列,通过下载器中间件交给下载器去下载
  3. 下载器得到响应对象后,通过蜘蛛中间件交给爬虫程序
  4. 爬虫程序进行数据提取:
    4.1) 数据交给管道文件去入库处理
    4.2) 对于需要继续跟进的URL,再次交给调度器入队列,依次循环
  • Scrapy命令
  1. 创建爬虫项目 : scrapy startproject 项目名

  2. 创建爬虫文件
    2.1) cd 项目文件夹
    2.2)scrapy genspider 爬虫名 域名

  3. 运行爬虫
    方法一: 终端运行
    scrapy crawl 爬虫名
    方法二: PyCharm运行
    创建run.py(和scrapy.cfg文件同目录创建)

    from scrapy import cmdline
    cmdline.execute('scrapy crawl wangyi'.split())
    

    直接运行 run.py 即可

  • Scrapy目录结构
Wangyi                  # 项目文件夹
├── WangYi               # 项目目录
│   ├── items.py        # 定义数据结构
│   ├── middlewares.py  # 中间件
│   ├── pipelines.py    # 数据处理
│   ├── settings.py     # 全局配置
│   └── spiders
│       ├── wangyi.py    # 爬虫文件
└── scrapy.cfg          # 项目基本配置文件
  • 有关settings.py的常用变量
  1. USER_AGENT = 'Mozilla/5.0'
  2. ROBOTSTXT_OBEY = False
    是否遵循robots协议, 一般我们一定要设置为False
  3. CONCURRENT_REQUESTS = 32
    最大并发量, 默认为16
  4. DOWNLOAD_DELAY = 0.5
    下载延迟时间: 访问相邻页面的间隔时间, 降低数据抓取的频率
  5. COOKIES_ENABLED = False | True
    Cookie默认是禁用的, 取消注释则 启用Cookie, 即:TrueFalse都是启用Cookie
  6. DEFAULT_REQUEST_HEADERS = {}
    请求头, 相当于requests.get(headers=headers)
  • 分析本次需求
  1. 抓取网易云音乐数据(排行榜)
    URL地址:https://music.163.com/#/discover/toplist
    图例:

  2. 所抓数据
    排名 --> ranking
    歌名 --> title
    时长 --> time
    歌手 --> singer

  • 分析完毕~ ~ ~正篇来了!

  • 创建项目和爬虫文件

scrapy startproject Wangyi
cd Wangyi
scrapy genspider wangyi www.music.163.com

  • 定义要爬取的数据结构items.py
""" items.py """
import scrapyclass WangyiItem(scrapy.Item):# 歌名title = scrapy.Field()# 排名ranking = scrapy.Field()# 时长time= scrapy.Field()# 歌手singer= scrapy.Field()
  • 编写爬虫文件wangyi.py
""" wangyi.py  """
# -*- coding: utf-8 -*-
import scrapyfrom selenium import webdriver
from ..items import WangyiItem
from scrapy.linkextractors import LinkExtractor # 链接提取器options = webdriver.FirefoxOptions()
options.add_argument('--headless')  #无界面模式class WangyiSpider(scrapy.Spider):name = 'wangyi'allowed_domains = ['www.music.163.com']start_urls = ['https://music.163.com/#/discover/toplist']def __init__(self):super().__init__()self.driver = webdriver.Firefox(options=options)def parse(self, response):# 响应内容# print(response.text)le = LinkExtractor()links = le.extract_links(response)for link in links:yield {'file_urls': [link.url]}# 获取内容tr_list = response.xpath('//table/tbody/tr')item = WangyiItem()for tr in tr_list:number = tr.xpath('./td[1]/div/span/text()')name = tr.xpath('./td[2]/div/div/div/span/a/b/@title')time = tr.xpath('./td[3]/span/text()')lable = tr.xpath('./td[4]/div/span/@title')# 结果: 列表,元素为选择器对象# .extract_first()# .get()# 获取单个item['ranking'] = number.get()item['title'] = name.get()item['time'] = time.get()item['singer'] = lable.get()# print(item)yield itemdef close(spider, reason):spider.driver.quit()# 关闭浏览器
  • 中间件middlewares.py
""" middlewares.py """
from scrapy import signals
from scrapy.http import HtmlResponse
#  在        爬虫名DownloaderMiddleware 添加
class WangyiDownloaderMiddleware:def process_request(self, request, spider):if spider.name == 'wangyi':spider.driver.get(request.url)   #使用浏览器访问爬取网址iframe = spider.driver.find_element_by_xpath('//*[@id="g_iframe"]')  #定位到iframespider.driver.switch_to.frame(iframe)  #最重要的,切换到iframe的html中body = spider.driver.page_source  #获取iframe中的html内容#重新将html的xml封装为response对象传给spiderreturn HtmlResponse(url=spider.driver.current_url, body=body, encoding='utf-8', request=request)else:return None
  • 全局配置文件settings.py
  • 注意:配置需谨慎
""" settings.py """
# robots协议
ROBOTSTXT_OBEY = False
# 下载延迟时间
DOWNLOAD_DELAY = 1
from fake_useragent import UserAgent
# 请求头
DEFAULT_REQUEST_HEADERS = {#  ....'User-Agent': UserAgent().random
}
# 中间件
DOWNLOADER_MIDDLEWARES = {'WangYi.middlewares.WangyiDownloaderMiddleware': 543,
}
# 管道 处理数据
ITEM_PIPELINES = {'WangYi.pipelines.WangyiPipeline': 300,
}
  • 管道文件处理数据pipelines.py
""" pipelines.py """import csv  # 存储csv 文件class WangyiPipeline(object):def process_item(self, item, spider):try:# 打开csv文件with open('music.csv', 'a+') as file:# 初始化写入对象write = csv.writer(file)# 写入数据(参数为列表)write.writerow([item['number'], item['name'], item['time'], item['label']])except Exception as error:passreturn item
  • 运行爬虫 run.py
""" run.py """
from scrapy import cmdlinecmdline.execute('scrapy crawl wangyi'.split())
  • 数据存储文件
  • 方式一:
    scrapy crawl wangyi -o 指定文件类型
  1. 存入csv文件
from scrapy import cmdlinecmdline.execute('scrapy crawl wangyi -o music.csv'.split())
  1. 存入json文件
from scrapy import cmdlinecmdline.execute('scrapy crawl wangyi -o music.json'.split())
  1. 注意: settings.py中设置导出编码 - 主要针对json文件
    FEED_EXPORT_ENCODING = 'utf-8'
    文件类型 'json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle'
  • 方式二:
    pipelines.py存储
    这里管道文件存储(pipelines.py)存入csv文件为例
    获取数据如下:(只展示部分数据)

    作者:淮南子.
    来源:CSDN
    版权声明:本文为博主原创文章,原创不易,请尊重原创转载请附上博文链接!

python3之Scrapy+Selenium切换iframe抓取网易云音乐排行榜相关推荐

  1. 使用selenium抓取网易云音乐数据

    今天通过一个简单的网易云音乐排行榜数据抓取与音乐下载实战案例,带着大家一起来学习如何抓取动态生成的页面内容.网易云音乐排行榜网址:https://music.163.com/#/discover/to ...

  2. python3爬取网易云歌单数据清洗_网页抓取网易云音乐及评论数据分析

    网页抓取网易云音乐及评论数据分析 游贤 成都理工大学信息科学与技术学院 [摘 要] 摘要:为了分析网易云音乐中哪些歌曲是热门歌曲,哪些歌曲的评论 最多,从而了解到人们对于不同音乐类型的喜爱程度,采用成 ...

  3. Python3爬虫抓取网易云音乐热评实战

    前一段时间刚刚入门python爬虫,有大概半个月时间没有写python了,都快遗忘了.于是准备写个简单的爬虫练练手,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论,于是写了这个抓取 ...

  4. python爬虫网易云音乐最热评论并分析_Python3实现爬虫抓取网易云音乐的热门评论分析(图)...

    这篇文章主要给大家介绍了关于Python3实战之爬虫抓取网易云音乐热评的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. ...

  5. python爬虫网易云音乐评论最多的歌_Python3实战之爬虫抓取网易云音乐的热门评论...

    前言 之前刚刚入门python爬虫,有大概半个月时间没有写python了,都快遗忘了.于是准备写个简单的爬虫练练手,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论,于是写了这个抓取 ...

  6. Python抓取网易云音乐热搜榜热评

    引子 啊~最有个小姐姐要做微信公众号,她需要优质的句子.文章,于是我想到了网易云每首伤感歌曲下面的评论,嗯~很感人,甚至有的时候真的感觉这里就是能触及我心灵最柔软的地方,正好这几天在学习python, ...

  7. python音乐的数据抓取与分析_python抓取网易云音乐热评做词图数据分析

    最近就有一部"怀旧"题材的电影,未播先火,那就是刘若英的处女作--<后来的我们>.青春,爱情,梦想,一直是"怀旧"题材的核心要素,虽然电影现在还未上 ...

  8. 带你写爬虫(python)第二篇----抓取网易云音乐下面的评论(API方式)

    抓取网易云音乐<大学无疆>的评论 一直喜欢使用网易云音乐,网易云歌曲下面的评论给其加分不少,所以这一篇来写一下怎么抓取歌曲下面的评论. 准备工作 目标网页:http://music.163 ...

  9. python爬取网易云音乐排行榜数据

    python爬取网易云音乐排行榜歌曲及评论 网易云音乐排行榜歌曲及评论爬取 主要注意问题:selenium 模拟登录.iframe标签定位.页面元素提取. 在利用selenium定位元素并取值的过程中 ...

最新文章

  1. c++ 解析从浏览器端传过来的图像base64编码,并转换成opencv识别的格式
  2. Software Testing Homework03:
  3. 看文艺青年怎么玩微信客户端
  4. dealloc时取weakself引起崩溃
  5. Spring简化Java开发_spring如何简化java开发
  6. 大数据:技术与应用实践指南_大数据技术与应用社团 社会实践总结篇
  7. 【luogu3372】线段树 1 模板
  8. react 刨坑之路之使用create-react-app脚手架
  9. Child module pom.xml of pom.xml does not exist @
  10. html中空格的编码
  11. 利用HTML+CSS,写出一个正方体并实现透视效果
  12. table 表格合并
  13. 15-EMM Procedure 5. Periodic TAU
  14. 关于hxxp //www hj234 com的问题
  15. 中文大写数字转换为阿拉伯数字(java)
  16. html 网页 简体中文 繁体中文 英文自适应,css页面字体替换源代码和页面显示不一样问题解决...
  17. 复习计算机二级 Excel常用函数公式
  18. win7图标变白色的解决办法
  19. js金额格式化,千分符,(好家伙!面试直接被问四次)
  20. Instruments使用指南(一)--- 简介

热门文章

  1. 明星2,3亿年收入,其实也合情合理
  2. 自定义redisTemplate以及redisutils的封装使用
  3. 手机屏幕投到Windows系统
  4. SpringMVC框架 |自定义类型转换器与日期格式化
  5. 基于yolov4作者最新力作yolov7目标检测模型实现火点烟雾检测
  6. 零基础学会3DsMax超炫酷战斗机飞行动画
  7. 简单易懂的P2P通信原理
  8. 华为实验18-OSPF区域认证
  9. 选择了软件测试,你后悔吗?
  10. 苹果双卡双待买哪款合适_iPhone 12/苹果12哪款最值得买?