2016-10-14 2 views
1

私はこのTDに含まれているテキスト全体を取得しようとしている:PythonでTDの全文を取得する(lxmlの)

例:タグの多くは、この内側にあります

<td> 
<p>Some Text</p> 
<a>SAMPLE</a> 
<table> 
    <tbody> 
    <tr> 
    <td>something</td> 
    .... 
    </tr> 
    ... 
    </tbody> 
</table> 
... 
</td> 

td、それは私のためにそれを難し​​くします。テーブルも含まれています。

FirePath(Firefoxの)において

私は単に取り付けることができる//テキスト()

.//*[@ ID = 'Testcases__list'] /テーブル/ TBODY/TR/TD //テキスト()

しかし、Pythonコードで//テキスト()の部分は

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: '()' 

lxmlのライブラリを使用して、私にエラーがスローされますどのように私はPythonでそのTDの全文を入手できますか?

+0

なぜちょうど '文字列(.//*[@ ID = 'Testcases__list'] /テーブル/のtbody/TR/TD)'使用しないで - ごとに[ docs](http://stackoverflow.com/documentation/xpath/1903/finding-elements-containing-specific-text/6209/find-all-elements-with-certain-text#t=201610140847415913303)、繰り返すのではなく各テキストノードの子孫ですか? –

答えて

-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タグを探しているウェブサイトを削ると、それとの間に何かを返します。このタグが別のタグの子である場合は、この特定のタグに移動して情報を出力できるように、親タグと子タグの関係を調べる必要があります。

-1

ここで私はあなたにコードを与えます。ちょうど最初のTDを取得するには

tr.xpath("//*[@id='Testcases__list']/table/tbody/tr/td//text()") 

:あなたは.xpathないのfindAllを使用する必要があります

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])) 
4

tr.xpath("(//*[@id='Testcases__list']/table/tbody/tr/td)[1]/text()") 

を私はまた、ソースが実際に持っていることを確認しますa tbody要素は、実際のソースではなくブラウザによって追加されることがよくありますe。

あなたが TEXT_CONTENTでき

tr.xpath("(//*[@id='Testcases__list']/table/tbody/tr/td)[1]")[0].text_content() 
+0

ありがとう、これは私のすべての問題を解決した – r00flr00fl

関連する問題