心得:每天进步一点点,不懂得去查询,去学习,自己慢慢会进步的更多。

自己在学习过程中总结出来的爬虫的过程:
1.导入库,确定要用到的库
2.确定要爬取的url:
动态网页往往隐藏了在XHR,JS页面内,需要发掘和寻找,找出的数据往往是json格式的数据,需要进一步去提取。(ajax加载)
今天的重点在这里,如何破解ajax网页,抓取想要的内容。
3.数据解析:
三种解析方式,正则表达式,BeautifulSoup,xpath 提取需要的数据
4.持久化存储:

动态加载实例

1.豆瓣电影名称和评分的抓取

看看豆瓣排行榜的网页:

可以看到预览(preview)这一栏的东西只是一个空壳子,而且此网页的请求的地址和我们网站输入的地址一样,所以更加确定这是一个ajax请求的网站了。

找不到我们需要的电影名称和评分,我们就需要去ALL里面找其他的返回网页,看看有没有我们需要的关键字。

在一个top_list的一栏中找到了我们需要的信息,但它是以json格式存储的,所以我们此页面对相应的url发出请求,才可以获得完整的数据,再进行解析,筛选。


此网页是一个get并且带参数的,所以我们也需要再代码中加入参数进行抓取,带参数的url问号之后的参数可以删掉,将参数的值加入params中传入请求。

介绍一种读取json格式的方法,有时对json格式内容不好抓取,可以将json转换为更清晰的格式:
将json转换为更清晰的格式

看代码:

#coding=utf-8
import requests
import jsondou_url="https://movie.douban.com/j/chart/top_list"
params={"type": "25", #5动作 #11剧情 24喜剧 20恐怖 10悬疑 19惊悚"interval_id": "100:90","action": "","start": "0", #从第几部电影去取"limit": "1000" #一次取多少部电影
}
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"
}
response=requests.get(url=dou_url,params=params,headers=headers)
for i in response.json():if float(i['score']) >= 9:print(i['title']+" : "+str(i['score']))

结果:

PS C:\Users\TianJian\Desktop\python> & C:/Users/TianJian/AppData/Local/Microsoft/WindowsApps/python.exe c:/Users/TianJian/Desktop/python/requests_1028/豆瓣电影高分.py
大雄的怀念奶奶 : 9.5
拽妹黛薇儿要上大学了没 : 9.4
千与千寻 : 9.3
机器人总动员 : 9.3
大闹天宫 : 9.3
虚幻勇士 : 9.3
苏联动画大师作品精选集 : 9.3

2.网易云音乐爬取,附加音乐的歌词。
网易云的动态加载做到了极致,它的音乐播放地址是一个外部链接,歌词链接也是一个外部链接,先看看它对应的url是什么:
因为它是动态加载我直接找到了,它对应的动态加载的url。

可以看到歌词的参数是被加密过的,我们不可能对加密的参数再进行请求,所以直接找到了它的外部

链接地址:

url="http://music.163.com/song/media/outer/url?id=1400256289.mp3"    #外链播放地址
lrc_url="http://music.163.com/api/song/lyric?id=3932159&lv=1&kv=1&tv=-1"   #外链歌词地址

我们拿到了外部链接地址,只需要再拿到对应的id就可以抓到对应的歌和歌词。

#coding=utf-8import os
import re
import json
import requests
from lxml import etree
from bs4 import BeautifulSoupfilepath="C:\\Users\\TianJian\\Desktop\\python\\数据解析1107\\top_music\\"  #定义存储路径if not os.path.exists(filepath):   #创建路径os.mkdir(filepath)headers={          #定义headers"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"}def down_song(song_url,song_path,name,headers):   #获得song_url后,下载歌曲song_r=requests.get(url=song_url,headers=headers).contentwith open(song_path,"wb") as f:f.write(song_r)print(name+" : 下载完成 ")def down_lyric(lrc_url,lyric_path,name,headers):  #获得lyric_url后,下载歌词r=requests.get(url=lrc_url,headers=headers).texttry:                                              #有些歌曲歌词不存在,需要用try过度lyric=json.loads(r)['lrc']['lyric']           #歌词url是一个json格式的文件,我们需要加载才可以使用lyric_r=re.sub(r'\[.*\]','',lyric)            #正则取剔除无用的信息with open(lyric_path,"w",encoding="utf-8") as f:f.write(lyric_r)print(name+" : 歌词 下载完成 ")except:print(name+"的歌词不存在~~~")pass#url="http://music.163.com/song/media/outer/url?id=1400256289.mp3"    #外链播放地址
#lrc_url="http://music.163.com/api/song/lyric?id=3932159&lv=1&kv=1&tv=-1"   #外链歌词地址#url="https://music.163.com/discover/toplist?id=3779629"   #top榜
#url="https://music.163.com/discover/toplist?id=1978921795"  #电音榜
url="https://music.163.com/discover/toplist?id=2250011882"  #抖音榜
song_base_url="http://music.163.com/song/media/outer/url?id="
lrc_base_url = 'http://music.163.com/api/song/lyric?id='s = requests.session()
r=s.get(url=url,headers=headers).content        #需要content来提取信息etree=etree.HTML(r)
title=etree.xpath('//a[contains(@href,"song?")]/text()')[:-3]   #抓取歌名,后三位无用信息,切片拿掉
id=etree.xpath('//ul[@class="f-hide"]/li/a/@href')  #抓取歌idfor name,i in zip(title,id):        #遍历song_id=i.split('=')[-1]       #分割,取得idsong_url=song_base_url+song_id+".mp3"   #歌url加工song_path=filepath+name+".mp3"   #歌存储路径加工lrc_url=lrc_base_url+song_id+'&lv=1&kv=1&tv=-1'  #词url加工lyric_path=filepath+name+".txt"  #词存储路径加工down_song(song_url,song_path,name,headers)   #分别调用down_lyric(lrc_url,lyric_path,name,headers)

3.千千音乐爬取:
看看动态的mp3信息:

url内含有一串加密过的字符串,我们不能对加密的字符串进行提取,继续找,在js页面中找到了关于音乐id关联的东西:


然后我们对此网页进行解析发现,替换id之后可以将对应的音乐直接访问,所以我们需要抓取id就行,我们用静态网页抓取的方法抓取了hot_top页面歌曲的id,逐一进行下载存储。

#coding=utf-8
import requests
from lxml import etree
import json
import osfilepath="C:\\Users\\TianJian\\Desktop\\python\\数据解析1107\\music\\"
# for tu_file in os.listdir(filepath):    #删除文件夹内的文件
#     os.remove(filepath+str(tu_file))
if not os.path.exists(filepath):os.mkdir(filepath)url="http://music.taihe.com/top/dayhot"
base_url="http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&songid="
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"}
r=requests.get(url=url,headers=headers).content.decode()f_etree=etree.HTML(r)
music_name=f_etree.xpath('//div[@class="song-item"]/span[@class="song-title "]/a[contains(@href,"/song/")]/text()')
music_id=f_etree.xpath('//li/div[@class="song-item"]/span[@class="song-title "]/a[contains(@href,"/song/")]/@href')
#print(len(music_id))for id,name in zip(music_id,music_name):second_url=base_url+id.split('/')[-1]#print(second_url,name)sec_r=requests.get(url=second_url,headers=headers).textsec_etree=etree.HTML(sec_r)three_url=sec_etree.xpath('//body//text()')[0]three_u=json.loads(three_url)three_ur=three_u['bitrate']['show_link']three_r=requests.get(url=three_ur,headers=headers).contentif '/' in name:name=name.replace('/','')downloadpath=filepath+name+".mp3"with open(downloadpath,'wb') as f:f.write(three_r)print(name+" 下载完成")

mp3存储时,写入的格式为wb格式

第二十九篇 ajax动态网页爬取,豆瓣电影,网易云音乐,千千音乐相关推荐

  1. 源码大公开!Python爬取豆瓣电影Top250源代码,赶紧收藏!

    哈喽~大家好,我是恰恰.不知道是不是有很多小伙伴跟我一样,很喜欢看电影,尤其是那种别人推荐的豆瓣高分电影,所以学Python就有一个好处,用Python爬取豆瓣电影那是分分钟的事,再也不用因为有些电影 ...

  2. Python爬虫: 单网页 所有静态网页 动态网页爬取

    Python爬虫: 单网页 所有静态网页 动态网页爬取 前言:所有页代码主干均来自网上!!!感谢大佬们. 其实我对爬虫还挺感兴趣的,因为我玩instagram(需要科学上网),上过IG的人都知道IG虽 ...

  3. 网络爬虫(动态网页爬取关于混合动力汽车的论文数据)

    一.实验目的 (1) 熟悉网页浏览器开发工具的使用: (2) 掌握动态网页加载过程: (3) 掌握 post 请求参数设置: (4) 掌握基本的反反爬技术: (5) 能够根据问题需求,指定网络爬虫方案 ...

  4. Python爬虫入门 | 7 分类爬取豆瓣电影,解决动态加载问题

      比如我们今天的案例,豆瓣电影分类页面.根本没有什么翻页,需要点击"加载更多"新的电影信息,前面的黑科技瞬间被秒--   又比如知乎关注的人列表页面:   我复制了其中两个人昵称 ...

  5. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

  6. python爬取豆瓣电影信息_Python爬虫入门 | 爬取豆瓣电影信息

    这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...

  7. python爬取豆瓣电影评论_python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法...

    def getHtml(url): """获取url页面""" headers = {'User-Agent':'Mozilla/5.0 ( ...

  8. scrapy爬虫框架教程(二)-- 爬取豆瓣电影

    前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大家讲解一个完整爬虫的流程. 工具和环境 语言:python 2 ...

  9. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

最新文章

  1. vue2 构建一个旅游类WebApp
  2. 人脸识别百亿蓝海之下,还需解决两方面问题
  3. Centos 7 修改内核启动顺序
  4. Kafka源码分析-序列3 -Producer -Java NIO(Reactor VS Peactor)
  5. 炫酷大屏demo_那些炫酷高端的可视化大屏,是如何开发出来的?
  6. 指针(Pointer)
  7. 送你一份有态度的红包封面!
  8. MYSQL 存储过程和函数 案例 例子
  9. 数据中心运维管理方案
  10. 通讯录管理系统(简洁版 课程设计)
  11. iacr是什么会议_计算机国际安全顶级会议
  12. ubuntu+python2.7+tensorflow-gpu安装
  13. 浅谈敏捷管理工具:看板(Kanban)
  14. SQL server 2008不允许保存更改的解决办法
  15. Java 17新特性,快到起飞?
  16. 使用海康工业相机的心路历程(一)
  17. 环形缓冲区RingBuff的代码实现
  18. 按键精灵使用脚本编写测试Android入门与实战
  19. Linux之uevent与ueventd区别
  20. Python切割九宫格图

热门文章

  1. zabbix 修改WINDOWS的CPU负载问题
  2. 中国电信携手极视角亮相 BEYOND EXPO,澳门特区行政长官贺一诚莅临视察
  3. kde钱包管理应用_5个出色的KDE应用可帮助您学习
  4. 2021-12-19:找到所有数组中消失的数字。 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums
  5. C语音面向对象编程方法及应用
  6. 数学分析 - 反常积分
  7. JAVA面试题输出26个英文字母
  8. 后台控制GridView中Itemtemplate中控件属性
  9. TCP重传机制有哪些?
  10. 程序员的浪漫:七夕准备好表白了吗