第四讲:json(Python实现)

 目录

1 基础知识回顾

2 爬虫——json 

2.1 json 是什么?

2.2 json 数据如何解析? 

3 爬虫——寻找周杰伦 (python代码实现)

3.1 确定目标

3.2 过程分析

3.3 代码实现  


1 基础知识回顾

第一讲:最能入门的爬虫教程(Python实现)

第二讲:HTML基础(python)

第三讲:爬虫——BeautifulSoup(Python)

第三讲实战:爬取成都房价

2 爬虫——json 

2.1 json 是什么?

Python语⾔当中,json是⼀种特殊的字符串,这种字符串特殊在它的写法——它是⽤列表/字典的语法写成的。我们可以将json格式的数据转化为列表/字典,也能将列表/字典转为json格式的数据。

a = '1,2,3,4'  # 这是字符串
b = [1,2,3,4]  # 这是列表
c = '[1,2,3,4]'  # 这是字符串,但它是用json格式写的字符串

2.2 json 数据如何解析? 


3 爬虫——寻找周杰伦 (python代码实现)

3.1 确定目标

(1)⽬标⽹站: https://y.qq.com/
(2)⽹站协议: https://y.qq.com/robots.txt (⽬标⽹站 + robots.txt 可查看⽬标⽹站的⻚⾯爬取许可);
(3)项⽬⽬标:爬取周杰伦的歌曲。

3.2 过程分析

(1)确定数据位置

import requests
from bs4 import BeautifulSoup

#~~~~请求html,得到response~~~~~
res_music =requests.get( ' https://y.qq.com/ portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=周杰伦')
#~~~~解析html~~~~~
bs_music = BeautifulSoup(res_music.text, ' html.parser')
#查找class属性值为“js_song”的a标签,得到一个由标签组成的列表
list_music = bs_music.find_all( 'a ' ,class_='js_song')
#打印它
print(list_music)

结果为空,打印源代码后发现歌曲名不存在与 html ⻚⾯。

(2)XHR 中查找请求⽂件

 

(3)数据在 client_search_cp?... 请求⽂件 ['data']['song']['list'] 中

3.3 代码实现  

(1)获取请求地址

#引用requests库
import requests
res_music = requests.get( 'https : / / c.y.qq.com /soso/fcgi-bin/client_search_cp?
ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=60997426243444153&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=周杰伦
&g_tk=5381&loginJin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0 ')
#调用get方法,下载这个字典

 (2)解析数据

json() 将获取到的 Response 对象转换为字典,再根据歌曲名的位置,我们⽤字典取值的
⽅式找到⻚⾯上的歌曲名信息。
#引用requests库
import requests
res_music = requests.get( 'https : / / c.y.qq. com /soso/fcgi-bin/client_search_cp?
ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=60997426243444153&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=周杰伦
&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0 ')
# 调用get方法,下载这个字典
json_music = res_music.json()
#使用json()方法,将response对象,转为列表/字典list_music = json_music[ ' data ' ][ 'song']['list' ]#一层一层地取字典,获取歌单列表
for music in list_music:
# list_music是一个列表,music是它里面的元素
print(music[ ' name ' ])
#以name为键,查找歌曲名

猜你喜欢

转载自blog.csdn.net/weixin_46039719/article/details/124093218