在 <pre> 标记内分隔文本
Posted
技术标签:
【中文标题】在 <pre> 标记内分隔文本【英文标题】:Separating text inside a <pre> tag 【发布时间】:2019-06-02 03:27:26 【问题描述】:我想尝试一些基本的网络抓取,但遇到了一个问题,因为我习惯了简单的 td-tags,在这种情况下,我有一个网页,其中包含以下 pre-tag 和其中的所有文本,这意味着刮起来有点麻烦。
<pre style="word-wrap: break-word; white-space: pre-wrap;">
11111111
11111112
11111113
11111114
11111115
</pre>
关于如何抓取每一行的任何建议?
谢谢
【问题讨论】:
【参考方案1】:如果这正是您想要解析的内容,您可以使用splitlines()
函数轻松获取行列表,或者您可以像这样调整split()
函数。
from bs4 import BeautifulSoup
content = """
<pre style="word-wrap: break-word; white-space: pre-wrap;">
11111111
11111112
11111113
11111114
11111115
</pre>""" # This is your content
soup = BeautifulSoup(content, "html.parser")
stuff = soup.find('pre').text
lines = stuff.split("\n") # or replace this by stuff.splitlines()
# print(lines) gives ["11111111", "11111112", "11111113", "11111114", "11111115"]
for line in lines:
print(line)
# prints each row separately.
【讨论】:
谢谢,但是如果有 5000 行呢?在代码中包含 HTML 内容并不是一个可靠的解决方案。下面是一个例子,退出地址:check.torproject.org/exit-addresses 至于你给出的例子,没有HTML内容,它只是纯文本。他们的bs4在那里毫无用处。因此,在这种情况下,您将搜索特定的重复字符串序列并相应地使用split()
。在你的情况下,ExitNode
这个词是唯一重复的,所以你会做s.split('ExitNode')
。【参考方案2】:
如果每一行确实是单独一行,为什么不把内容拆分成一个列表呢?
data = soup.find('pre').text
lines = data.splitlines()
您可以将True
传递到splitlines 例程中以保留行尾,如果这是您想要的。
【讨论】:
以上是关于在 <pre> 标记内分隔文本的主要内容,如果未能解决你的问题,请参考以下文章