私はほぼ間違いなくこれをひどく間違っています.私の問題の原因は私自身の無知ですが、Pythonのドキュメントと例を読んでも役に立ちません.
私はウェブスクレイピングをしています。私がスクレイピングしているページには、次の顕著な要素があります。
<div class='parent'>
<span class='title'>
<a>THIS IS THE TITLE</a>
</span>
<div class='copy'>
<p>THIS IS THE COPY</p>
</div>
</div>
私の目的は、親 div でグループ化された「タイトル」と「コピー」からテキスト ノードを取得することです。上記の例では、タプルを取得したいはずです('THIS IS THE TITLE', 'THIS IS THE COPY')
以下は私のコードです
## 'tree' is the ElementTree of the document I've just pulled
xpath = "//div[@class='parent']"
filtered_html = tree.xpath(xpath)
arr = []
for i in filtered_html:
title_filter = "//span[@class='author']/a/text()" # xpath for title text
copy_filter = "//div[@class='copy']/p/text()" # xpath for copy text
title = i.getroottree().xpath(title_filter)
copy = i.getroottree().xpath(copy_filter)
arr.append((title, copy))
私はn 個filtered_html
の要素のリストになることを期待しています(それはそうです)。次に、その要素のリストを繰り返し処理し、それぞれを ElementTree に変換してタイトルを取得し、別の xpath 式でテキストをコピーしようとしています。したがって、反復ごとに、要素iのタイトル テキストを含む長さ 1 のリストであり、コピー テキストの対応するリストであると期待しています。title
copy
最終的には、反復ごとに、 xpath式に一致するドキュメント内のすべての要素を含むtitle
長さnのリストであり、コピーテキストの長さnの対応するリストです。title_filter
copy
今では、xpath と etree を使って何をしているのかを知っている人なら誰でも、私が恐ろしい、間違った、ばかげたことをしていることに気付くはずです。もしそうなら、彼らは私が代わりにこれをどのようにすべきか教えてもらえますか?