這個問題是我之前的一個提問 經過了兩三天的研究終於解決了
背景:
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化