0

我想知道如何从这个网站的这个标签中提取文本:https ://ru.thefreedictionary.com/%d1%88%d1%87%d0%be

<div id="MainTxt">


            Слово в словаре не найдено.
 <div id="didYouMean"></div>Быть может, вы искали:
<div style="margin:6px 0 3px 0">

我正在使用的代码获取 id 标签下的所有内容,但我只想获取文本“Слово в словаре не найдено”。

soup.findAll("div", attrs = {"id": ["MainTxt"]})

感谢您的任何帮助!

4

2 回答 2

1

我相信您遇到的问题是</div>'Слово в словаре не найдено' 之后的 html 页面上没有。

这意味着“MainTxt”包括直到下一个</div>未打开的所有内容。你可以把它们想象成圆括号或花括号。

所以这类似于 。. .

Maintxt{
Слово в словаре не найдено.
didYouMean{}Быть может, вы искали:

您可以尝试获取所有 Maintxt,就像在您的代码中一样,然后删除所有其他 div,但不幸的是,这可能不像单行那么简单,因为您正在使用的 html 不包装 Слово в словаре не найдено。在自己的 div 中

于 2020-05-14T21:14:34.553 回答
1

首先,不需要findAll()与属性结合,因为该htmlid中只能有一个元素,所以总是会返回一个元素的列表。这是解决问题的方法。idfindAll()

match = soup.find('div', {'id': 'MainTxt'})
text = match.text.rstrip().lstrip().split('\n')

rstrip()并且lstrip()用于删除字符串前后的尾随空格。现在text是元素列表:['Слово в словаре не найдено.\r', ' Быть может, вы искали:\r', '', ...]. 获取目标字符串很容易。

target_string = text[0].replace('\r', '')
于 2020-05-15T11:47:03.110 回答