私はScrapyを使用していて、変数を使用するとよい場所がいくつかありますが、その方法がわかりません。つまり、長い文字列がある場合は、それを変数に格納してからlong_string
選択すると便利ですhxs.select('\\div[@id=long_string]')
。これはScrapyでサポートされていると確信していますが、文字列を常にハードコーディングする必要があるとは限らないため、理解できません。
更新:以下のサンプルテキストでは、divを抽出したいと思いますid="footer"
。
<div id="footer">
<div id="footer-menu">
<div class="region-footer-menu">
<div id="block-menu-menu-footer-menu" class="block-menu">
<div class="content">
<ul class="menu">
<li class="first leaf"><a href="/faq" title="">FAQs</a></li>
<li class="leaf"><a href="/media" title="">Media</a></li>
<li class="leaf"><a href="/partners" title="">Partners</a></li>
<li class="last leaf active-trail"><a href="/jobs" title="" class="active-trail active">Jobs</a></li>
</ul>
</div>
</div>
<div id="block-block-52" class="block block-block">
<div class="content">
<p>SUPPORT</p>
</div>
</div>
</div>
</div>
</div>
hxs = HtmlXPathSelector(response)
以下のすべてのセグメントに対して初期化します。次のコードは、最初のdivのみを選択します。
hxs.select('//div[@id=concat("foot","er")]')
このコードは何も選択しませんが、エラーは発生しません。
hxs.select('//div[@id="foot"+"er"]')
以下のコードセグメントはどちらも何も選択せず、エラーも発生しません。
long_string = "foot"
hxs.select('//div[@id=concat(long_string,"er")]')
hxs.select('//div[@id=long_string]')
下の2つの方法のいずれかを実行して、目的の結果を返すことができるようにしたいと思います。