繁体   English   中英

如果满足条件,Xpath会获取数据

[英]Xpath get data if conditions is satisfied in scrapy

我正在使用scrapy提取数据。 我要抓取的产品有数千种。问题是这些页面上的数据不一致,即。

<table class="c999 fs12 mt10 f-bold">
                                        <tbody><tr>
                            <td width="16%">Type</td>
                            <td class="c222">Kurta</td>
                        </tr>
                                                    <tr>
                                <td>Fabric</td>
                                <td class="c222">Cotton</td>
                            </tr>
                                                                                                    <tr>
                                <td>Sleeves</td>
                                <td class="c222">3/4th Sleeves</td>
                            </tr>
                                                                                                    <tr>
                                <td>Neck</td>
                                <td class="c222">Mandarin Collar</td>
                            </tr>
                                                                                                    <tr>
                                <td>Wash Care</td>
                                <td class="c222">Gentle Wash</td>
                            </tr>
                                                                                                    <tr>
                                <td>Fit</td>
                                <td class="c222">Regular</td>
                            </tr>
                                                                                                    <tr>
                                <td>Length</td>
                                <td class="c222">Knee Length</td>
                            </tr>
                                                                                                                        <tr>
                                <td>Color</td>
                                <td class="c222">Brown</td>
                            </tr>
                                                                                                    <tr>
                                <td>Fabric Details</td>
                                <td class="c222">Cotton</td>
                            </tr>
                                                                                                                                                                                <tr>
                            <td>
                                Style                            </td>
                            <td class="c222"> Printed</td>
                        </tr>
                                                                                                    <tr>
                        <td>
                            SKU                        </td>
                        <td id="qa-sku" class="c222"> SR227WA70ROJINDFAS</td>
                    </tr>

                                                    <tr>
                        <td></td>

                    </tr>
                            </tbody></table>

所以这些行是不一致的。 有时“类型”在第一个位置,有时在第二个位置。 我编写了代码来遍历这些值,并比较第一个td的值(如果它是“ Type”),则获取其对应td的值,但它不起作用。这是代码。

table_data = response.xpath('//*[@id="productInfo"]/table/tr')
        for data in table_data:
            name = data.xpath('td/text()').extract()

我该怎么办??

您可以尝试使用以下xpath:

name = data.xpath("td[position()=(count(../../tr/td[.='Type']/preceding-sibling::td)+1)]/text()").extract()

以上的xpath滤波器<td>位置时,只返回<td>在等于位置的位置<td>Type</td> 通过计算<td>Type</td>的前一个同级<td>加1来获得位置。

尝试这个,

In [29]: response.xpath('//table[@class="c999 fs12 mt10 f-bold"]/tr[contains(td/text(), "Type")]/td[contains(text(), "Type")]/following-sibling::td/text()|//table[@class="c999 fs12 mt10 f-bold"]/tr[contains(td/text(), "Type")]/td[contains(text(), "Type")]/preceding-sibling::td/text()').extract()
Out[29]: [u'Kurta']

无论td是在Type之后还是Type之前,都可以。

如果要获取包含字符串“ Type”的td同级节点,无论此td处于什么位置,都可以尝试使用xpath:

//td[contains(text(),'Type')]/following-sibling::td/text()
//table/tbody/tr/td[.="Fabric"]/../td[2]/text()

上面的代码做了吗

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM