我试图获取此td中包含的全文:
示例:
<td>
<p>Some Text</p>
<a>SAMPLE</a>
<table>
<tbody>
<tr>
<td>something</td>
....
</tr>
...
</tbody>
</table>
...
</td>
这个标签里面有很多标签,这对我来说很难。甚至包含表格。
在FirePath(Firefox)中,我可以简单地附加// text()
.//* [@ ID =&#39; Testcases__list&#39;] /表/ tbody的/ TR / TD //文本()
但是在Python代码中,// text()部分使用lxml库
引发了一个错误Traceback (most recent call last):
File "D:\pythonscripts\Bachelor\TestMain.py", line 52, in <module>
print tr.findall('./td[6]//text()')[0].text
File "src\lxml\lxml.etree.pyx", line 1563, in lxml.etree._Element.findall (src\lxml\lxml.etree.c:56897)
File "C:\Python27\lib\site-packages\lxml\_elementpath.py", line 304, in findall
return list(iterfind(elem, path, namespaces))
File "C:\Python27\lib\site-packages\lxml\_elementpath.py", line 277, in iterfind
selector = _build_path_iterator(path, namespaces)
File "C:\Python27\lib\site-packages\lxml\_elementpath.py", line 260, in _build_path_iterator
selector.append(ops[token[0]](_next, token))
KeyError: '()'
如何在Python中获取该td的全文?
答案 0 :(得分:4)
你应该使用 .xpath 而不是 findall :
tr.xpath("//*[@id='Testcases__list']/table/tbody/tr/td//text()")
要获得第一个td:
tr.xpath("(//*[@id='Testcases__list']/table/tbody/tr/td)[1]/text()")
我还要验证源实际上是否有 tbody 元素,通常是由浏览器添加而不是在实际源中。
您可以 text_content :
tr.xpath("(//*[@id='Testcases__list']/table/tbody/tr/td)[1]")[0].text_content()
答案 1 :(得分:-1)
在这里,我将为您提供代码。
from lxml import etree
from lxml.html import tostring,fromstring
import re
TAG_RE = re.compile(r'<[^>]+>')
tree = etree.HTML('''
<td>
<p>Some Text</p>
<a>SAMPLE</a>
<table>
<tbody>
<tr>
<td>something</td>
....
</tr>
...
</tbody>
</table>
...
</td>
''')
print TAG_RE.sub('',tostring(tree.xpath("//td")[0]))
答案 2 :(得分:-2)
如果是网站,你想要BeautifulSoup! https://www.crummy.com/software/BeautifulSoup/
这样的事情:
import requests
from bs4 import BeautifulSoup
r = requests.get("Your_Link")
soup = BeautifulSoup(r.content)
print soup.find('td').text
这会抓住网站寻找td标签,并在它之间返回任何内容。如果此标记是另一个标记的子标记,则需要查看父标记和子标记关系,以便您可以导航到此特定标记并打印其信息。