Python拆分为换行符
我有一个html文件,我只是检索文本的主体 我想打印一行 现在我正在打印Python拆分为换行符,python,string,split,beautifulsoup,urllib2,Python,String,Split,Beautifulsoup,Urllib2,我有一个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.
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您可以使用它来获取第一行:
first_line = newName.body.getText().partition("\n")[0]
假设newName
是BeautifulSoup
对象。它通常被命名为汤
从第一个
text = soup.pre.string
要获取文本中的行列表,请执行以下操作:
list_of_lines = text.splitlines(True)
ith_line = list_of_lines[i]
如果要在文本中保留行尾标记,请执行以下操作:
list_of_lines = text.splitlines(True)
ith_line = list_of_lines[i]
要从列表中获取第i行,请执行以下操作:
注意:基于零的索引,例如,i=2
对应于第三行。不能保证HTML文件有多行。网页可以按行排列,但页面的结构不必与标记的结构相匹配,反之亦然
为了确保这一点,请尝试以下方法:
打印len(newName.body(text=True).split('\n'))
如果该值大于1,则应该能够获得所需的行,如:
newName.body(text=True).split('\n')[257]
也许不是最优雅的方式,但如果事实上有多行,它会起作用。是不是你想要行[127:line.find('\n')]
因为你确定它来自127
,那么同样你必须确保有一行\n
“我想打印一行”是否打印newName.body(text=True)[257]
按预期工作?否这会产生一个错误“列表索引超出范围”发布了错误的错误消息正确的错误消息是“ValueError:substring not found”您确定使用regexp不会提供更好的解决方案吗?似乎您正在获取HTML文档正文的文本,并尝试从127个字符一直获取到“\n”-事实上,这些文本位实际上是文档结构的一部分,这意味着Xpath或类似的内容将是一个更好的选择-也许您可以提供一个您尝试获取的HTML页面片段提取。@sotapme代码类似于“cptn cheesebox loves cerial”这些都是单独的行,但我不知道如何使其看起来像代码这会产生错误“AttributeError:'NoneType'对象没有属性'partition'”@MysterMyster:try.getText()
。它也应该在旧的beautifulsou
版本上工作。这会产生索引器:tuple index out-range OK,所以现在如果我先执行\u line=newName.body.getText().partition('\n')[2],它会像以前一样返回第257行的所有文本,但现在打印第一行[257:@mystermyyster:.partition()
返回3-tuple。总是。你不能用我的答案中的代码获取Indexer。如果要获取行列表,可以使用.splitlines()
。但是使用行号从html中提取内容是非常脆弱的。要在要提取的文本周围包含您看到的html标记,请执行以下操作:第一行生成attributeError:“resultset”对象没有属性拆分