我正试着从一个网页上搜集一些数据。标签文本中有换行符和<br/>
标记。我只想知道标签开头的电话号码。你能给我个建议吗?怎么才能得到号码?
以下是HTML代码:
<td>
+421 48/471 78 14
<br />
<em>(bowling)</em>
</td>
在漂亮汤中是否有一种方法可以在标签中得到文本,但只有那些不被其他标签包围的文本?第二件事:去掉文本换行符和html换行符?
我用BS4。
产出为:+421 48/471 78 14‘
你有什么想法吗?谢谢
发布于 2014-08-24 23:07:29
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属性指向随后立即解析的内容。
发布于 2014-08-24 21:28:21
对你有用吗?
>>> 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'
>>>
发布于 2021-04-14 18:11:45
另一种方法是使用decompose()
方法去除标记(从树中移除标记,然后完全销毁标记及其内容)。
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)
输出:
+421 48/471 78 14
https://stackoverflow.com/questions/25476316
复制相似问题