有没有办法从HTML中提取字符串?

2024-10-03 00:23:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个方法来生成一个文件名为osu!我正在下载的地图。理想情况下,我会在HTML中查找某个短语beatmapsets?q=,然后得到q=后面的单词。你知道吗

我试过用lxml.html文件,但是我对此没有什么经验,在下面的代码中,它返回一个空列表。你知道吗

class OsuMaps:
    def generateFileName(self, num1=None):
        if not num1:
            print("Missing required argument: 'num1'")
            return
        dl = requests.get(f"https://bloodcat.com/osu/s/{num1.rstrip()}")

        # ..generate FinalName

        tree = fromstring(dl.content)
        FinalName = tree.xpath(
            "//a[contains(@href='beatmapsets?q=')]"
        )

        return FinalName
osu - OsuMaps()
osu.generateFileName("653534") # ideal outcome - "653534 Panda Eyes - ILY"

理想的结果是评论,但我不知道从哪里开始。我只知道我需要的两个关键字[即songname,ILY和artist,Panda Eyes]在HTML中是:

<a class="beatmapset-header__details-text beatmapset-header__details-text--title u-ellipsis-overflow" href="/beatmapsets?q=ILY">ILY</a>

以及

<a class="beatmapset-header__details-text beatmapset-header__details-text--artist" href="/beatmapsets?q=Panda%20Eyes">Panda Eyes</a>

我还需要能够重用此代码,以便每次都能获得q=<text>文本。你知道吗


Tags: texthtmldetailspandaclassosuheaderhref
1条回答
网友
1楼 · 发布于 2024-10-03 00:23:38

根据请求documentationrequests.get.content返回原始字节响应。 您需要解析的是dl.text。你知道吗

@RomanPerekhrest也指出,给定的链接引用一个二进制文件,所以用lxml解析它是没有意义的。但是,您可以使用requests.head()方法获取文件名并提取所需的数据。你知道吗

尝试以下操作:

dl = requests.head(f"https://bloodcat.com/osu/s/{num1.rstrip()}") 
fname = dl.headers["Content-Disposition"].split('filename="')[-1].split('";')[0].replace("%20", " ")

# fname == '653534 Panda Eyes - ILY.osz'

相关问题 更多 >