我有一个 html 文件,我只是从中检索文本正文。
我想用一行打印它。
现在我像这样打印它:
for line in newName.body(text=True):
print line
这给了我体内我想要打印的所有内容:
for line in newName.body(text=True):
print line[257:_____] # this is where i need help
我希望它转到换行符,而不是 ____ 或选择另一个数字作为结尾,所以它看起来像:
for line in newName.body(text=True):
print line[257:'\n']
然而这并没有什么作用。
我怎样才能让它发挥作用?
我正在处理的文本位于:
body
pre
The text I want
/pre
/body
.partition()
方法来获取第一行:
first_line = newName.body.getText().partition("\n")[0]
假设
newName
是一个 BeautifulSoup
对象。它通常被命名为soup
。
要从 html 中的第一个
<pre>
标签获取文本:
text = soup.pre.string
获取文本中的行列表:
list_of_lines = text.splitlines()
如果您想在文本中保留行尾标记:
list_of_lines = text.splitlines(True)
要从列表中获取第 i 行:
ith_line = list_of_lines[i]
注意:从零开始的索引,例如
i = 2
对应于第三行。
无法保证您的 HTML 文件有多于一行。网页可以按行布局,但页面的结构不必与标记的结构匹配,反之亦然。
为了确定起见,试试这个:
print len(newName.body(text=True).split(' '))
如果该值>1,那么你应该能够得到你需要的行,例如:
newName.body(text=True).split(' ')[257]
也许不是最优雅的方式,但如果实际上有多行,它是有效的。
您是否想要
line[127:line.find('\n')]
,因为您确定它来自127
,那么同样您必须确定有一个\n
。