仅在某个元素之后和之前开始刮擦

时间:2018-06-19 01:00:02

标签: python-3.x scrapy

这是HTML的样子:

<h4>Categories</h4>
<ul>
    <li>Cars</li>
    <li>Bikes</li>
    <li>Planes</li>
</ul>

<h4>Brands</h4>
<ul>
    <li>Audi</li>
    <li>BMW</li>
    <li>Mercedes</li>
</ul>

<h4>FAQ</h4>
<ul>
    <li>FAQ1</li>
    <li>FAQ2</li>
    <li>FAQ3</li>
</ul>

我试图仅使用Scrapy提取品牌。除了H4开始新部分之外,类别与品牌部分之间没有区别特征。此外,还有许多类别和品牌,因此很难对其进行硬编码。

1 个答案:

答案 0 :(得分:3)

您可以使用followingfollowing-sibling轴。

例如,为了获得品牌,您可以按文字获取所需的h4元素,然后通过ul转到下一个following-sibling兄弟:

//h4[. = 'Brands']/following-sibling::ul[1]/li/text()

来自Scrapy shell的演示:

$ scrapy shell ./index.html
>>> response.xpath("//h4[. = 'Brands']/following-sibling::ul[1]/li/text()").extract()
['Audi', 'BMW', 'Mercedes']