2016-05-02 10 views
1

私はPythonを通してXPathを試してきました。Python。特定のXPath式が動作しない

事はありませんすべての式が動作していることです。

私はちょうどXPathのヘルパー Chromeの拡張機能を発見しました。

あなたがChromeを見るようにXPathを検出するが、Pythonはありません。

ウェブサイト:link

Xpath detected

マイコード:

import __future__ 
from lxml import html 
import requests 
from bs4 import BeautifulSoup 

page = requests.get('http://directory.ccnecommunity.org/reports/rptAccreditedPrograms_New.asp?sort=institution') 
soup = str(BeautifulSoup(page.content, 'html.parser')) 


tree = html.fromstring(soup) 
smth = tree.xpath('/html/body/table[@class="center"][2]/tbody/tr[1]/td[2]/table[2]/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr/td/text()') 

print(smth) 

smthリストは空です。どうして?それはXpathに示されているすべてのtdで構成されているはずです。

答えて

0

tbodyタグが存在しない場合、xpathはセレクタの一部としてtbodyを使用しています。あなたのブラウザは仕様の必須部分であるためページをレンダリングするときにtbodyセクションを埋めていますが、ソースを見ると実際には存在しません。

は、ブラウザが見るものを信用してはいけません。特にJavaScriptを有効にしている場合。要素木があなたの単純なようなものではないページで終わることがよくあります。requests.get()が表示されます。

+0

これは、htmlが壊れていることを意味しますか?私はそれをどのように修正することができます... 私は 'BeautifulSoup'から' html.parser'引数がこの問題を解決しますと思いました。 –

1

どういうわけか、それはわずかに異なる質問を何度も何度も同じ問題を取得する迷惑取得。
ページのhtmlが完全に壊れているという問題があります(変更されません)。ですから、ブラウザ、lxml、またはBeautifulSoupの間でDOMの解釈が異なることを受け入れる必要があります。私は、soupという文字列をファイルに保存して、BeautifulSoupが壊れたhtmlで何をしたのか把握してみることをお勧めします。 これで、正しいxpathが(もしあれば)どんなものか分かります。

+0

本当にすみません。私は今それを得た。 –

関連する問題