从HTML文档中提取标签内文本

3

我有一个像这样的HTML文档:https://dropmefiles.com/wezmb 所以我需要提取<span id="1" and </span之间的文本,但我不知道如何操作。 我正在尝试编写这段代码:

from bs4 import BeautifulSoup

with open("10_01.htm") as fp:
    soup = BeautifulSoup(fp,features="html.parser")
    for a in soup.find_all('span'):
      print (a.string)

但它会提取所有“span”标签中的信息。那么,我该如何在Python中提取标签<span id="1">和</span>之间的文本?


你是否考虑过只使用普通的Python函数来解析文本,而不是专门使用名为“BeautifulSoup”的Python库中的函数? - Geoff Griswald
@GeoffGriswald BeautifulSoup已被用于网页抓取。它不能解析文本,因为它不是为此目的而设计的。在决定回答某个主题的问题之前,请了解与该主题(例如网络抓取)对应的基本库。 - pu239
不,我还没有考虑使用简单功能。您能帮忙使用它们来解决这个问题吗? - Terry
@Terry 不用担心“普通的Python函数”,因为它们不会像bs4那样轻松地从HTML中提取文本(通过使用.find_all和其他方法)。 - pu239
1
@Samarth Bhatia 哦,好的。谢谢你的帮助! - Terry
Samarth,你当然会注意到我没有“决定回答主题中的问题”,实际上我所做的是发表评论,这与回答非常不同。我并没有建议使用BeautifulSoup来解析文本,而是建议使用本地Python函数。事实证明,在BeautifulSoup中有一个函数可以做到OP想要的,这很棒,但我不可能知道每个Python库的功能,我仍然支持我的原始评论。 - Geoff Griswald
1个回答

1
你需要的是 .contents 函数。文档 使用以下代码找到 <span id = "1"> ... </span>
for x in soup.find(id = 1).contents:
    print(x)

或者

x = soup.find(id = 1).contents[0] # since there will only be one element with the id 1.
print(x)

这将给你:

10


即,一个空行后面跟着10再跟着另一个空行。这是因为HTML中的字符串实际上是这样的,并且会在新行中打印10,正如您在HTML中看到的那样,10有它自己的一行。
该字符串将正确地为'\n10\n'
如果你想从x = '\n10\n'中仅得到x = '10',你可以这样做:x = x[1:-1],因为'\n'是一个单字符。希望这能帮助到你。

你能展示一下整个代码应该是什么样子吗?因为仅替换打印参数,它还会输出所有HTML标签中的所有信息,但是用[]和/n在开头和结尾。但我只需要两个标签之间的文本<span id = "1"></span>,这可以在HTML文档中看到。 - Terry
哦,好的!我会等待。 - Terry
@Terry,我已经编辑了我的答案,使其更好。 - pu239
数据库列是什么?(谈论的是哪个数据库?) - pu239
1
是的,你说得对,最好提出新问题。非常感谢你的回答!以下是我的新问题链接,如果您能帮助我:https://stackoverflow.com/questions/67606031/insert-text-into-microsoft-access-data-base - Terry
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接