我正在使用Scrapy并且遇到了一些使用变量会很好的地方,但我无法弄清楚如何使用。这意味着如果我有一些长字符串,最好将它存储在变量long_string
中,然后选择它:hxs.select('\\div[@id=long_string]')
。
我确信这是Scrapy支持的,我无法理解它,因为你总是不得不对字符串进行硬编码是没有意义的。
更新:
因此,对于下面的示例文本,我想提取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]')
我希望能够使用底部两种方法中的任何一种并返回所需的结果。
答案 0 :(得分:1)
假设+适用于Scrapy中的字符串连接,这应该有效:
hxs.select('//div[@id="' + long_string + '"]')
我不熟悉Scrapy,但我认为你不能选择一个不存在的div。
答案 1 :(得分:0)
hxs.select('\\div[@id="' + long_string_variable + '"]')