在xpath中使用列表变量

时间:2018-03-30 11:08:27

标签: python python-3.x xpath web-scraping scrapy

我想在这个HTML上抓住这本书的封面。封面有时是第一顺序,有时它是第二顺序。

<div class="content">
    <ul>
        <li>
            <b>Series</b>
            Campell
        </li>
        <li>
            <b>Hardcover:</b>
            1465 pages
        </li>
    </ul>
</div>

我将封面类型放在此列表中

cover = ['Hardcover', 'BoardBook', 'CardBook']

当我在xpath中专门编写'Hardcover'时,它可以正常工作。

response.xpath("//li/b[contains(text(),'Hardcover')]/text()").extract()

但是,当我使用列表cover[0]的索引时,它也会带来其他内容。

response.xpath('//li/b[contains(text(),cover[0])]/text()').extract()

我想迭代列表值以在标签之间检查其中一个。

1 个答案:

答案 0 :(得分:3)

你需要字符串连接:

response.xpath('//li/b[contains(text(), "' + cover[0] + '")]/text()').extract()

xpath_string = '//li/b[contains(text(), "{}")]/text()'.format(cover[0])
response.xpath(xpath_string).extract()

warning 检查this有关xpath注入的信息