【问题标题】:Does an XPath selector can be find to accommodate multiple scenarios?是否可以找到 XPath 选择器来适应多种场景?
【发布时间】:2020-11-22 12:30:26
【问题描述】:

上下文

我正在尝试获得可以适应两种情况的 Xpath 选择。我的爬虫访问多个页面并使用 Xpath 选择器查找特定表。然后,爬虫解析表,旨在适应最常见的第一种情况。

但在某些情况下,数据的呈现方式有所不同,如您在第二种情况中所见。

第一个场景

<tr>
    <th>node_1</th>
    <td>
        <div class="plainlist">
            <ul>
                <li><a href=#>item_1</a></li>
                <li><a href=#>item_2</a></li>
                <li>item_3</li>
            </ul>
        </div>
    </td>
</tr>

Xpath 选择很适合这个:

table.xpath('//tr/th[contains(text(),"node_1")]/following-sibling::td//text()[normalize-space()]').getall()

第二个场景

<tr>
    <th>
        <div>Node<br>name</div>         #subnode + formatting
    </th>
    <td>
        <div>
            <div class="plainlist">
                <ul>
                    <li><a href="#">item_1</a></li>
                    <li><a href="#">item_2</a></li>
                </ul>
            </div>
        </div>
    </td>
</tr>

问题

是否有可以适应这两种情况的 Xpath 选择器,或者我是否需要尝试第一个选择器并在没有结果的情况下编写另一个选择器?

【问题讨论】:

    标签: xml xpath web-scraping scrapy


    【解决方案1】:

    您可以将Item Loadersoutput_processor = TakeFirst() 用于项目:

    l.add_xpath('FieldName', '//your/first/xpath')
    l.add_xpath('FieldName', '//your/second/xpath')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多