在Html XPath选择器中使用变量

时间:2013-01-02 20:28:04

标签: xpath scrapy

我正在使用Scrapy并且遇到了一些使用变量会很好的地方,但我无法弄清楚如何使用。这意味着如果我有一些长字符串,最好将它存储在变量long_string中,然后选择它:hxs.select('\\div[@id=long_string]')。 我确信这是Scrapy支持的,我无法理解它,因为你总是不得不对字符串进行硬编码是没有意义的。

更新: 因此,对于下面的示例文本,我想提取id="footer"

中的div
<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 个答案:

答案 0 :(得分:1)

假设+适用于Scrapy中的字符串连接,这应该有效:

hxs.select('//div[@id="' + long_string + '"]')

我不熟悉Scrapy,但我认为你不能选择一个不存在的div。

答案 1 :(得分:0)

你尝试过吗?

hxs.select('\\div[@id="' + long_string_variable + '"]')