博客 / 詳情

返回

解決 xpath遇到特殊符號匹配不全信息的問題

這個問題是我之前的一個提問 經過了兩三天的研究終於解決了
背景:

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化

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.