3

我有一个 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 我想要的文本 /pre /body

4

3 回答 3

8

您可以使用.partition()方法来获取第一行:

first_line = newName.body.getText().partition("\n")[0]

假设newName是一个BeautifulSoup对象。它通常被命名为soup.

要从<pre>html 中的第一个标签获取文本:

text = soup.pre.string

要获取文本中的行列表:

list_of_lines = text.splitlines()

如果要在文本中保留行尾标记:

list_of_lines = text.splitlines(True)

要从列表中获取第 i 行:

ith_line = list_of_lines[i]

注意:从零开始的索引,例如,i = 2对应于第 3 行。

于 2013-02-10T18:52:53.280 回答
2

无法保证您的 HTML 文件不止一行。网页可以排成一行,但页面的结构不必与标记的结构相匹配,反之亦然。

可以肯定的是,试试这个:

打印 len(newName.body(text=True).split('\n'))

如果该值> 1,那么您应该能够获得所需的行,例如:

newName.body(text=True).split('\n')[257]

也许不是最优雅的方式,但它确实有效,如果实际上有多行的话。

于 2013-02-10T19:56:10.623 回答
2

是你想要line[127:line.find('\n')]的,因为你确定它是127从那时起同样你必须确定有一个\n.

于 2013-02-10T20:13:04.103 回答