首页 > 解决方案 > 如果我没有确切的字符串但包含它的变量,如何使用 Python3 替换字符串的一部分

问题描述

所以,我已经抓取了一个网站http://quotes.toscrape.com/作为课程的一部分,并正在创建一个猜谜游戏来猜测引用的作者。游戏提供了四种猜测,在最后一种猜测中,我想提供作者简历中的一句话。现在,我已成功请求此页面并抓取了简历,但我想从简历的描述中删除作者姓名、姓氏和名字的所有实例,这样我就可以避免在最后的提示中给出作者的姓名。

elif remaining_guesses == 1:
            bio_request = requests.get(f"{base_url}{random_quote['url']}")
            soup = BeautifulSoup(bio_request.text, "html.parser")
            description = soup.find(class_="author-description").get_text()
            desc_part = description.split(".")[4]
            name = random_quote["name"]
            print(type(name))

            if name in desc_part:
                desc_part.replace(name, "author")
            elif random_quote["name"].split(" ")[0] in desc_part:
                desc_part.replace(random_quote["name"].split(" ")[0], "author")
            elif random_quote["name"].split(" ")[1] in desc_part:
                desc_part.replace(random_quote["name"].split(" ")[1], "author")
            print(f"A hint from his bio: {desc_part}")

我正在尝试使用 replace() 函数,但我知道我不能通过将变量作为要替换的字符串来以这种方式使用它,所以如何用 for 替换名称、姓氏或名字的出现例如“作者”。

如果我不够清楚,请告诉我,我什至可以提供我拥有的整个代码。我在考虑使用正则表达式的可能性,但我不确定这是否最合适。所以,问题是我每次在游戏循环时都会随机选择引号,所以我不知道作者的名字,我可以像使用 random_quote["name"] 一样将它写在变量中,但是替换() 需要一个精确的输入,我可以给它一个变量输入并说如果位于 desc_part 中的变量的所有实例是作者简历中的一个句子(在这种情况下是第 5 句,但我可能让它随机,它不会没关系)。这是生物外观的示例http://quotes.toscrape.com/author/Albert-Einstein/

标签: python-3.xstringweb-scrapingreplacebeautifulsoup

解决方案


不确定这是否有帮助,但您可以这样做:

name= "Albert Einstein"
name_parts=name.split()
scraped_data=scraped_data.replace(name, "Author")
for i in name_parts:
   scraped_data=scraped_data.replace(i, "Author")

我不确定这是否有帮助。如果他们使用“先生”。或类似的东西,那么您也可以在同一个循环中添加该案例。不管是什么,请告诉我:D 祝你好运!


推荐阅读