鱼C论坛

 找回密码
 立即注册
查看: 1337|回复: 7

[已解决]如何爬取网页正在加载的资源?

[复制链接]
发表于 2024-1-29 08:27:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
网易云音乐,https://music.163.com/#/song?id=1900024768,我想爬去到Network里加载的mp3资源,可以用python实现吗?
最佳答案
2024-1-29 08:30:06
歌者文明清理员 发表于 2024-01-29 08:29
这个MP3并不在html文档里,只在network里


如果目标资源(比如MP3)并不在HTML文档中,而是在网络请求中加载的,那么你可以使用Python的第三方库`requests`结合浏览器的开发者工具来模拟请求,从而获取到该资源。

首先,打开浏览器的开发者工具(一般是按F12键),然后切换到"Network"或"网络"选项卡。接下来,在浏览器中输入目标URL,并进行加载。在开发者工具的"Network"选项卡中,你能看到所有的网络请求,包括MP3资源。

找到目标请求,右键点击它,选择"Copy",然后选择"Copy as cURL"(在Chrome浏览器中)或者"Copy All as HAR"(在Firefox浏览器中)。这将复制请求的相关信息。

接下来,你可以使用Python的`requests`库来发送模拟请求,并获取到MP3资源的内容。下面是一个示例代码:
import requests

# 将复制的cURL命令粘贴到下面
curl_command = "curl 'https://music.163.com/song/media/outer/url?id=1900024768.mp3' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' -H 'Accept: */*' -H 'Referer: https://music.163.com/song?id=1900024768' -H 'Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7' --compressed"

# 将复制的cURL命令转换为等效的Python代码
session = requests.Session()
req = requests.Request()
prepped = req.prepare()
prepped.url = 'https://music.163.com/song/media/outer/url?id=1900024768.mp3'
prepped.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
prepped.headers['Accept'] = '*/*'
prepped.headers['Referer'] = 'https://music.163.com/song?id=1900024768'
prepped.headers['Accept-Language'] = 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7'

response = session.send(prepped)

# 将获取到的MP3资源保存到文件
with open('song.mp3', 'wb') as f:
    f.write(response.content)
    print("MP3资源下载完成")

请注意,你需要将复制的cURL命令粘贴到代码中的`curl_command`变量。代码会将cURL命令自动转换为Python代码,并使用`requests`库发送请求获取MP3资源内容。最后,将资源保存到文件中。

希望这个示例能帮助你爬取网页中正在加载的MP3资源!记得遵守相关网站的规定和法律,以及避免对网站造成过大的访问压力。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-29 08:28:20 | 显示全部楼层
是的,你可以使用Python来爬取正在加载的网页资源。一种常见的方法是使用第三方库`requests`来发送HTTP请求获取网页内容,然后使用正则表达式或者其他解析库来提取目标资源的URL。

下面是一个示例代码,演示如何使用Python爬取网易云音乐中的MP3资源:
import requests
import re

# 发送GET请求获取网页内容
url = 'https://music.163.com/song?id=1900024768'
response = requests.get(url)
html = response.text

# 使用正则表达式提取MP3资源的URL
pattern = r'"(http:\/\/.*\.mp3)"'
mp3_urls = re.findall(pattern, html)

# 下载MP3资源
for mp3_url in mp3_urls:
    response = requests.get(mp3_url)
    filename = mp3_url.split('/')[-1]  # 提取文件名
    with open(filename, 'wb') as f:
        f.write(response.content)
        print(f"{filename} 下载完成")

在该示例中,我们首先使用`requests`库发送GET请求获取网页内容,并将返回结果的文本保存在`html`变量中。然后使用正则表达式提取出MP3资源的URL,并保存在`mp3_urls`列表中。最后,我们遍历`mp3_urls`列表,逐个下载MP3资源文件。

请注意,网站的反爬虫机制可能会禁止直接访问网页内容或者限制并发请求数量。因此,在实际应用中,你可能需要设置合适的请求头、休眠时间以及使用代理等方式来规避反爬虫策略。同时,请务必遵守相关网站的爬虫规则,避免对网站造成过大的访问压力。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-29 08:29:25 | 显示全部楼层
FishC 发表于 2024-1-29 08:28
是的,你可以使用Python来爬取正在加载的网页资源。一种常见的方法是使用第三方库`requests`来发送HTTP请求 ...

这个MP3并不在html文档里,只在network里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-29 08:30:06 | 显示全部楼层    本楼为最佳答案   
歌者文明清理员 发表于 2024-01-29 08:29
这个MP3并不在html文档里,只在network里


如果目标资源(比如MP3)并不在HTML文档中,而是在网络请求中加载的,那么你可以使用Python的第三方库`requests`结合浏览器的开发者工具来模拟请求,从而获取到该资源。

首先,打开浏览器的开发者工具(一般是按F12键),然后切换到"Network"或"网络"选项卡。接下来,在浏览器中输入目标URL,并进行加载。在开发者工具的"Network"选项卡中,你能看到所有的网络请求,包括MP3资源。

找到目标请求,右键点击它,选择"Copy",然后选择"Copy as cURL"(在Chrome浏览器中)或者"Copy All as HAR"(在Firefox浏览器中)。这将复制请求的相关信息。

接下来,你可以使用Python的`requests`库来发送模拟请求,并获取到MP3资源的内容。下面是一个示例代码:
import requests

# 将复制的cURL命令粘贴到下面
curl_command = "curl 'https://music.163.com/song/media/outer/url?id=1900024768.mp3' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' -H 'Accept: */*' -H 'Referer: https://music.163.com/song?id=1900024768' -H 'Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7' --compressed"

# 将复制的cURL命令转换为等效的Python代码
session = requests.Session()
req = requests.Request()
prepped = req.prepare()
prepped.url = 'https://music.163.com/song/media/outer/url?id=1900024768.mp3'
prepped.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
prepped.headers['Accept'] = '*/*'
prepped.headers['Referer'] = 'https://music.163.com/song?id=1900024768'
prepped.headers['Accept-Language'] = 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7'

response = session.send(prepped)

# 将获取到的MP3资源保存到文件
with open('song.mp3', 'wb') as f:
    f.write(response.content)
    print("MP3资源下载完成")

请注意,你需要将复制的cURL命令粘贴到代码中的`curl_command`变量。代码会将cURL命令自动转换为Python代码,并使用`requests`库发送请求获取MP3资源内容。最后,将资源保存到文件中。

希望这个示例能帮助你爬取网页中正在加载的MP3资源!记得遵守相关网站的规定和法律,以及避免对网站造成过大的访问压力。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-29 08:39:27 | 显示全部楼层
FishC 发表于 2024-1-29 08:30
如果目标资源(比如MP3)并不在HTML文档中,而是在网络请求中加载的,那么你可以使用Python的第三方库` ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-29 08:39:45 | 显示全部楼层


抱歉,我明白你的表情意思!有时候解决网络爬虫问题可能会比较棘手,尤其是涉及到加载的资源。确保你按照正确的步骤进行操作,并且在代码中正确地复制了cURL命令。如果问题仍然存在,请确保你的请求头(headers)等信息正确,并且没有被网站拦截或阻止。此外,还要注意合适的请求频率,避免对网站造成非法的访问行为。如果仍然遇到困难,你可以尝试使用其他工具或者库,例如Selenium或Puppeteer,它们可以在模拟浏览器环境下执行JavaScript代码,并提供更高级的Web自动化功能。祝你好运!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-29 09:46:36 | 显示全部楼层
这样子爬下来的MP3还会有那种会员加密吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-29 09:49:18 | 显示全部楼层
yinda_peng 发表于 2024-1-29 09:46
这样子爬下来的MP3还会有那种会员加密吗?

就是说你看那个MP3文件是否会带有音乐软件的图标
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 20:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表