首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在<br/> python/bs4 4之前获取文本

在<br/> python/bs4 4之前获取文本
EN

Stack Overflow用户
提问于 2014-08-24 21:02:39
回答 3查看 8.4K关注 0票数 6

我正试着从一个网页上搜集一些数据。标签文本中有换行符和<br/>标记。我只想知道标签开头的电话号码。你能给我个建议吗?怎么才能得到号码?

以下是HTML代码:

代码语言:javascript
运行
复制
<td>
    +421 48/471 78 14



    <br />
    <em>(bowling)</em>
</td>

在漂亮汤中是否有一种方法可以在标签中得到文本,但只有那些不被其他标签包围的文本?第二件事:去掉文本换行符和html换行符?

我用BS4。

产出为:+421 48/471 78 14‘

你有什么想法吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-24 23:07:29

代码语言:javascript
运行
复制
html="""
<td>
    +421 48/471 78 14



    <br />
    <em>(bowling)</em>
</td>
"""


from bs4 import BeautifulSoup

soup = BeautifulSoup(html)

print soup.find("td").contents[0].strip() 
+421 48/471 78 14

print soup.find("td").next_element.strip()
+421 48/471 78 14

soup.find("td").contents[0].strip()找到我们获得的第一个元素tag的内容,并用str.strip()删除所有\n换行符。

从docs 元素

字符串或标记的.next_element属性指向随后立即解析的内容。

票数 9
EN

Stack Overflow用户

发布于 2014-08-24 21:28:21

对你有用吗?

代码语言:javascript
运行
复制
>>> from bs4 import BeautifulSoup
>>> str = str.replace("\n", "") # get rid of newlines
>>> str = "<td>   +421 48/471 78 14    <br /><em>(bowling)</em></td>"
>>> for item in soup.td.children:
...   phone = item # first item is the phone number
...   break
... 
>>> phone
u'   +421 48/471 78 14    '
>>> phone.strip()
u'+421 48/471 78 14'
>>> 
票数 1
EN

Stack Overflow用户

发布于 2021-04-14 18:11:45

另一种方法是使用decompose() 方法去除标记(从树中移除标记,然后完全销毁标记及其内容)。

代码语言:javascript
运行
复制
from bs4 import BeautifulSoup

string = '''
<td>
    +421 48/471 78 14



    <br />
    <em>(bowling)</em>
</td>
'''

soup = BeautifulSoup(string, 'html.parser')
em = soup.select_one('em').decompose()

phone = soup.select_one('td').text.strip()
print(phone)

输出:

代码语言:javascript
运行
复制
+421 48/471 78 14
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25476316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档