最近 Python を使い始めたばかりで、少し xPath で使用したいのですが、クエリの結果を出力すると [] しか取得できず、なぜ =S なのかわかりません。
import libxml2, urllib
doc = libxml2.parseDoc(urllib.urlopen("http://www.domain.com/").read())
result = doc.xpathEval("//th//td[(((count(preceding-sibling::*) + 1) = 2) and parent::*)]//a")
if result != []:
print result
elif result == "":
print "null"
else:
print result
doc.freeDoc()
[]だけでエラーは発生しません。どうなり得るか?また、libxml2 については、ここよりも優れたドキュメントがありますか? 非常に紛らわしいので =S
編集
コードを変更したので、[] よりも多くの情報が得られます。解析しようとしている html の非有効性に関連する次の出力が得られます (ただし、それは私のものではないため、変更できません)。 . Pythonにその事実をより寛容にするように指示する方法についてのアイデアはありますか?
^ エンティティ: 行 3552: パーサー エラー: タグ tr 行 209 のデータの途中終了
^ エンティティ: 行 3552: パーサー エラー: タグ tbody 行 208 のデータの途中終了
^ エンティティ: 行 3552: パーサー エラー: タグ テーブル行 207 のデータの途中終了
^ エンティティ: 行 3552: パーサー エラー: タグ入力行 206 のデータの途中終了
^ エンティティ: 行 3552: パーサー エラー: タグ入力行 205 のデータの途中終了
^ エンティティ: 行 3552: パーサー エラー: タグ フォーム行 204 のデータの途中終了
^ エンティティ: 行 3552: パーサー エラー: タグ テーブル行 99 のデータの途中終了
^ エンティティ: 行 3552: パーサー エラー: タグ div 行 98 のデータの早期終了
^ エンティティ: 行 3552: パーサー エラー: タグ本体行 96 のデータの途中終了
^ エンティティ: 行 3552: パーサー エラー: タグ html 行 3 のデータの途中終了
^ トレースバック (最新の呼び出しが最後): ファイル "C:\Python26\lib\site-packages\libxml2.py"、1263 行目、ret が None の場合は parseDoc 内:raise parserError('xmlParseDoc() failed') libxml2.parserError : xmlParseDoc() が失敗しました
実際にはもっと長いリストですが、すべてのエラーは無効な html が原因であるため、すべてをここに配置しても意味がありません。