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

时间:2019-07-20 19:27:12

标签: python html python-requests

我想要一种为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"

已对理想结果进行了注释,但是我不知道从哪里开始。我所知道的是我需要的两个关键词[分别是歌曲名ILY和歌手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>文本。

1 个答案:

答案 0 :(得分:1)

根据请求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'