共计 974 个字符,预计需要花费 3 分钟才能阅读完成。
这个问题是我之前的一个发问 通过了两三天的钻研终于解决了
背景:
import requests
from lxml import etree
url = "https://music.163.com/discover/toplist?id=3779629"
headers = {'User-Agent': "PostmanRuntime/7.15.2",}
response = requests.request("GET", url, headers=headers)
'''”<”、”&”'''
r = etree.HTML(response.text)
l = r.xpath("//textarea[@id='song-list-pre-data']/text()")
print(l)
最终输入(支只复制了最初一段):
lLevel”:”exhigh”,”pl”:320000},”djid”:0,”fee”:0,”album”:{“id”:158052587,”name”:”Sakana~( ˵>ㅿㅿ\n’]
失常来说 这个 xpath 语句 是匹配到一个残缺的 json 模式数据 然而遇到了特殊符号 就在特殊符号处匹配完结了 导致信息拿不全
解决办法:
应用 bs4 解析包(由查阅相干材料,stackoverflow 网评 bs4 比 xpath 在某些非凡场景更强壮)
并且留神 soup = BeautifulSoup(response.text, “lxml”)
的参数肯定不要应用 lxml 要应用 html.parser
最终代码:
import requests
from bs4 import BeautifulSoup
url = "https://music.163.com/discover/toplist?id=3779629"
headers = {'user-agent': "PostmanRuntime/7.15.2"}
response = requests.request("GET", url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
textarea = soup.find('textarea', attrs={'id': 'song-list-pre-data'}).get_text()
print(textarea)
最终输入能够拿到残缺的 str 用于 json 化
正文完