如何解决Python 爬取网易云评论为[ ]的问题

我们在使用基础知识爬取网易云评论发现爬取不到内容,但是标签似乎也没有问题,html定位内容也没有出错,具体显示如下:
如何解决Python 爬取网易云评论为[ ]的问题如何解决Python 爬取网易云评论为[ ]的问题

 #起始地址
start_url = 'https://music.163.com/#/song?id=1366450142'
        #请求头,浏览器模拟
        #设置这一步的目的是为了伪装我们的爬虫,防止被识别出来
        #由requests自动生成的headers,可被服务器轻易识别为爬虫
headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
        }
'''
params="K2HjGyPzWSCz2O772ysQLqvidrQlnnjxpnBh/ZjO8j8FLlHKNxNn+VQyMuztFaxMbUcj4pm98zkF6IpQ7RjIcFGMAbrv+C8DP6MaS5JoEx0MtMcizFfcoysQ0vG9RRTqXP0tRvie+7vgFfcSv1zg1u3zjUPswqWXH7dq9AoRL23cAhG4H9jFcUfUzovMlwXP"
encSecKey="ccbe33dd2f440faf537173be8d6b237257d0493faee3708cfbb91ca80ce45c3fa0dfea2af7650d251bd8c140638cae8719906bac1ff379b8c4cc79a1c95e267ab6fc28bc63c78d3e9eff396d4b43a97284b6770ecf429bc209a7954056e2355f81459bdd951ba90da7bb47711556fae4986281fe13c41e89fede0881726731d7"
data = {
        "params":params,
        "encSecKey":encSecKey
    }
'''
res = requests.get(start_url,headers)

# 把网页解析为BeautifulSoup对象
soup = BeautifulSoup(res.text,'html.parser') 
items=soup.find_all('div',class_='cnt f-brk')
for item in items:
    print(type(item))
    #comment=item.find(class_='s-fc7')
    comment=item.find('a')
    print(comment)

如何解决Python 爬取网易云评论为[ ]的问题
在图最下面,它告诉我们:此处共有99个请求,4.5Mb的流量,耗时3.81s完成。
我们在代码中得到的不过是第一个请求,具体点开第一个请求,我们发现其实评论不在这里面。

如何解决Python 爬取网易云评论为[ ]的问题如何解决Python 爬取网易云评论为[ ]的问题

在Network中,有一类非常重要的请求叫做XHR(当你把鼠标在XHR上悬停,你可以看到它的完整表述是XHR and Fetch)
我们平时使用浏览器上网的时候,经常有这样的情况:浏览器上方,它所访问的网址没变,但是网页里却新加了内容。
典型代表如购物网站,下滑自动加载出更多商品。在线翻译网站,输入中文实时变英文。比如,你正在使用的教学系统,每点击一次Enter就有新的内容弹出。
这个,叫做Ajax技术(技术本身和爬虫关系不大,在此不做展开,你可以通过搜索了解)。应用这种技术,好处是显而易见的——更新网页内容,而不用重新加载整个网页。又省流量又省时间的
如今,比较新潮的网站都在使用这种技术来实现数据传输。只剩下一些特别老,或是特别轻量的网站,还在用老办法——加载新的内容,必须要跳转一个新网址。
这种技术在工作的时候,会创建一个XHR(或是Fetch)对象,然后利用XHR对象来实现,服务器和浏览器之间传输数据。

我们需要找到含有目标信息的html在哪里。

import requests
from bs4 import  BeautifulSoup
headers={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
url='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=%E5%91%A8%E6%9D%B0%E4%BC%A6&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0'
# 使用json()方法,将response对象,转为列表/字典
res_music = requests.get(url,headers)
print(res_music.status_code)
json_music = res_music.json()
# 一层一层地取字典,获取歌单列表
list_music = json_music['data']['song']['list']
# list_music是一个列表,music是它里面的元素
for music in list_music:
    # 以name为键,查找歌曲名
    print(music['name'])

    '''
# 解析html
bs_music = BeautifulSoup(res_music.text,'html.parser')

json_music = res_music.json()
# 一层一层地取字典,获取歌单列表
list_music = json_music['data']['song']['list']
# list_music是一个列表,music是它里面的元素
for music in list_music:
    # 以name为键,查找歌曲名
    print(music['name'])
'''

如何解决Python 爬取网易云评论为[ ]的问题

欢迎来到肥鼠路易的CSDN博客空间,一键三连,欢迎大家常来做客,一起学习交流
上一篇:Shell Necklace (dp递推改cdq分治 + fft)


下一篇:关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事