关于xpath:解决-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化

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理