我尝试根据html文档中前面的文字识别给定的<table>
元素。
我目前的方法是对每个html表元素进行字符串化并在文件文本中搜索其文本索引:
filing_text=request.urlopen(url).read()
#some text cleanup here to make lxml's output match the .read() content
ref_text = lxml.html.tostring(filing_text).upper().\
replace(b" ",b"&NBSP;")
tbl_count=0
for tbl in self.filing_tree.iterfind('.//table'):
text_ind=reftext.find(lxml.html.tostring(tbl).\
upper().replace(b" ",b"&NBSP;"))
start_text=lxml.html.tostring(tbl)[0:50]
tbl_count+=1
print ('tbl: %s; position: %s; %s'%(tbl_count,text_ind,start_text))
鉴于table
元素的起始索引,我可以搜索前面的x个字符,这些字符可以识别帮助以识别表格的内容。
这种方法存在两个问题:
问题:有更好的方法吗?是否有一种lxml方法可以在给定元素之前提取文本内容?我想象一下像itertext()那样从元素向后移动,递归地通过html文档字符串。
答案 0 :(得分:1)
使用美丽的汤。只是一个让你开始的嗤之以鼻:
>>> from bs4 import BeautifulSoup
>>> stupid_html = "<html><p> Hello </p><table> </table></html>"
>>> soup = BeautifulSoup(stupid_html )
>>> list_of_tables = soup.find_all("table")
>>> print( list_of_tables[0].previous )
Hello