scrapy爬取QQ音乐榜单歌曲及豆瓣电影信息。
系列文章目录
第一章 scrapy爬取起点中文网24小时热销榜单。
第二章 scrapy爬取苏州二手房交易信息。
第三章 scrapy爬取QQ音乐榜单歌曲及豆瓣电影信息。
目录
系列文章目录
前言
一、scrapy爬取QQ音乐榜单歌(JavaScript)
1.项目需求
2.项目分析
3.代码编写
二、scrapy爬取豆瓣电影信息
1.项目需求(Ajax)
2.项目分析
3.代码编写
总结
前言
这次要爬取的两个项目分别使用了JavaScript和Ajax。因为二者的语法很相似所以写到一片博客里面。也可以更方便的进行对比。
一、scrapy爬取QQ音乐榜单歌(JavaScript)
1.项目需求
目标网址:https://y.qq.com/n/yqq/toplist/4.html。
现要将榜单中的歌曲信息爬取下来,字段有:歌曲名称、唱片、歌手和时长。
2.项目分析
通过控制台分析发现,具体信息并不存储在静态html信息之中。
所以要去javascript中寻找相应的信息存储文件。
博主之前写代码时存储信息还在javascript,但现在已经被隐藏了,但是博主的爬虫还能正常运行,所有直接给大家把网址贴出来。正常情况应该大家在js文件中自己寻找。
https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?&topid=4
大家可以看到这个信息非常的凌乱根本无法直接提前信息,这个时候就需要用的json格式化,百度直接搜就可以,但博主还是吧网址贴出来。json在线格式化。
进入后将目标文件源代码粘贴进去,点击格式化校验。
仔细观察可以发现,json编码只有两种类型,类似于python的字典和列表,这样就可以和分析html静态页面一样进行数据抓取了。
我们所需要的信息都存在一个叫songlist的列表中,其中的每一个元素都是以字典的形式存在的。
3.代码编写
1.编写item(数据封装)
import scrapyclass QqmusicItem(scrapy.Item):song_name=scrapy.Field() #歌曲album_name = scrapy.Field() #唱片singer_name = scrapy.Field() #歌手interval = scrapy.Field() #时长
2.编写spider(数据抓取(核心代码))
from scrapy import Request
from scrapy.spiders import Spider
from ..items import QqmusicItem
import json #引入json库class MusicSpider(Spider):name = "music"passdef start_requests(self):url="https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?&topid=4"yield Request(url)def parse(self, response,):json_text=response.text #json格式化music_dict=json.loads(json_text) #加载json文件for one_music in music_dict["songlist"]:item=QqmusicItem()#获取歌曲名称item["song_name"]=one_music["data"]["songname"]#获取唱片item["album_name"] = one_music["data"]["albumname"]#获取歌手item["singer_name"] = one_music["data"]["singer"][0]["name"]#获取市场item["interval"] = one_music["data"]["interval"]yield item
3.编写settings(项目配置)
伪装浏览器,不遵循robots协议
4.start.py(代替命令行)
在爬虫项目文件夹下创建start.py。
运行之后生成csv文件。
二、scrapy爬取豆瓣电影信息(Ajax)
1.项目需求
将中国大陆的电影信息爬取下来,字段有:电影名称、导演、演员和评分。
目标url:https://movie.douban.com/tag/#/?sort=U&range=0,10&tags=电影,中国大陆
信息类型可根据需要自行修改。
2.项目分析
在控制台分析发现,信息是采用Ajax局部动态刷新技术实现的。
当我们将页面拉到最下方发现,需要手动获取新的内容。点击加载更多。
之后便出现了新的Ajax文件。
进行url分析。
https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=电影&start=0&countries=中国大陆
https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=电影&start=20&countries=中国大陆
对比发现只有start的属性值发生了变化而且是以20为单位进行递增。
所以只需要挨个访问相应的url进行数据抓取就可以了。
但是相应的文件内容也仍然很凌乱。
这里我们依旧使用json格式化。
这里依旧只有列表和字典两种形式。都存储在data中。依次抓取信息即可
3.代码编写
1.编写item(数据封装)
import scrapyclass DoubanItem(scrapy.Item):title = scrapy.Field() #电影名称dicectors = scrapy.Field() # 导演casts = scrapy.Field() # 演员rate = scrapy.Field() # 评分
2.编写spider(数据抓取(核心代码))
#coding:utf-8from scrapy import Request
from scrapy.spiders import Spider
from ..items import DoubanItem
import json
import timeclass DoubanSpider(Spider):name = "movies"current_page=1 #起始页面def start_requests(self):url="https://movie.douban.com/j/new_search_subjects?tags=电影&start=0&countries=中国大陆"yield Request(url)passdef parse(self, response):item=DoubanItem()json_text=response.textmovie_dict=json.loads(json_text)if len(movie_dict["data"])==0:returnelse:for one_movie in movie_dict["data"]:#获取电影名称item["title"]=one_movie["title"]# 获取导演item["dicectors"] = one_movie["directors"]# 获取演员item["casts"] = one_movie["casts"]# 获取评分item["rate"] = one_movie["rate"]yield item#爬取更多next_url="https://movie.douban.com/j/new_search_subjects?tags=电影&start=%d&countries=中国大陆"%(self.current_page*20)self.current_page+=1time.sleep(1) #等待一秒,防止IP被封yield Request(url=next_url)
3.编写settings(项目配置)
伪装浏览器,不遵循robots协议
4.start.py(代替命令行)
在爬虫项目文件夹下创建start.py。生成scv文件。
运行项目会出现一个报错。
这是因为咱们只设置了项目的开始,并没有设置项目的结束,到最后访问不到新的Ajax就会出现这个错误但并不影响项目整个的效果。
总结
此次将javascript和Ajax放到了一起,主要是因为二者的访问方法和编码方法很类似,一次性讲解可以省很多时间。
scrapy爬取QQ音乐榜单歌曲及豆瓣电影信息。相关推荐
- python爬取千千音乐榜单_Python爬取QQ音乐榜单数据
原博文 2020-08-09 12:56 − 1.爬取QQ音乐榜单数据并存入数据库(MySQL) 2.代码 import requests import json from bs4 import Be ...
- python爬取音乐并保存的格式_python爬取QQ音乐歌单歌曲保存到本地,json解析
序:python强大的功能,可以爬取网上的某些信息,本次主要是通过爬歌单信息熟悉下python基础. 用到知识点: 1.python3.urllib.request.openurl 2.json (j ...
- python爬取音乐并保存_python爬取QQ音乐歌单歌曲保存到本地,json解析
序:python强大的功能,可以爬取网上的某些信息,本次主要是通过爬歌单信息熟悉下python基础. 用到知识点: 1.python3.urllib.request.openurl 2.json (j ...
- Python3运用requests包爬取QQ音乐指定歌手歌曲
Python3应用requests包开发定向爬虫 最近学院给我们开设了Python+爬虫课程,请来了外面的公司的老师来给我们进行了为期10天的爬虫课程,实训的日子最近结束,我也有时间把我们平常写的拿来 ...
- 使用scrapy爬取qq音乐
记录一下爬取qq音乐的过程 首先我们搜索一个歌手 如:周杰伦 就会得到周杰伦的歌曲列表 我们点击播放,在所有的请求中找到这个: 这个请求就是真正播放歌曲的请求,那我们看一下他的url http://1 ...
- scrapy爬取qq音乐
url分析,拿到初始url(start_url) 要爬取的内容为qq音乐的排行榜中的歌曲,首先我们要分析url: 1.打开qq音乐的首页,点击排行榜,右键,检查(谷歌浏览器,其他浏览器各有不同,360 ...
- python批量爬取QQ音乐歌手的歌曲等信息
import requests,openpyxl #导入模块 wb=openpyxl.Workbook() #创建工作薄 sheet=wb.active #获取工作薄的活动表 sheet.title= ...
- java爬取酷狗榜单歌曲信息并存入数据库
这里只解析一下代码,所需工具jsoup.HttpClient httpCLient获取html后,用jsoup解析html,再用java来获取所需要的信息. 之前写的有点问题,今天改了一下.因为通过h ...
- 爬取QQ音乐中一首歌的相关信息及评论(破解反爬虫、多协程队列爬虫)
刚写完这个实验作业,顺便来记录一下一些易错的地方: 目录 一.页面预览 二.其他信息 三.一些小细节 四.源码 项目框图: 一.页面预览 先从歌手页爬取到这首歌的相关信息,包括它歌曲.专辑的url.这 ...
最新文章
- 【Ionic+AngularJS 开发】之『个人日常管理』App(二)
- HipHop算法:利用微博互动关系挖掘社交圈
- Linux内核Crash分析
- (Matlab源码)Matlab实现算术编码(Arithmetic coding)超级详解(每一段代码都可以看懂)
- 【英语学习】【WOTD】muse 释义/词源/示例
- 我爱我家:旗下APP已全面兼容鸿蒙系统
- fusionjs 学习二 核心概念
- 数据结构(C语言版第二版)思维导图
- SpringBoot+Vue批量下载图片压缩包
- named_struct类型怎么用
- 机器学习模型评价指标(准确率、精度、召回率)
- 计算机桌面广告弹窗,电脑乱弹广告怎么办_怎么禁止桌面弹出广告
- win7系统64位下安装sql server2000时提示兼容性问题
- IDEA中@author 模板的设置
- phpunit 基境
- JS基础 day1 | JS介绍、变量常量、数据类型及转换
- Masonry自动布局详解五:比例(multipliedBy)
- Windows 无法连接到打印机.打印后台程序服务没有运行
- 计算机省二打字,巧用音频转文字,省去打字烦恼
- Idea在项目中新建项目