【问题标题】:Get Element using XPath in Puppeteer在 Puppeteer 中使用 XPath 获取元素
【发布时间】:2020-07-17 19:14:27
【问题描述】:

我正在尝试抓取具有相同类名但每个元素具有不同数量的子元素的多个元素。我正在寻找一种使用 xpath 选择特定元素的方法(这将使我的循环变得最简单)。

const gameTimeElement = await page.$$('//*[@id="section-content"]/div[2]/div[1]/div/div['+ i + ']');
const gameTimeString = await gameTimeElement[j].$eval('h3', (h3) => h3.innerHTML);

这目前不起作用。 选择元素后,我抓取内部的 h3 标签并对其进行评估以获取 innerHTML。 有没有办法利用 xpath 做到这一点?

<div id="section-content" style="display: block;">
</div>
<div class="matches">
        <div class="day day-28-1" data-week="1" style="display: block;">
            <h4>Sat, March 28, 2020</h4>
            <div class="day-wrap">
                <div class="match region-7-57d5ab4-9qs98v" data-week="1">
                    <h3 class="time">2:00PM 
                        <span>(Central Daylight Time)</span>
                        <span class="fr">Best of 7</span>
                    </h3>
                    <div class="row ac ">
                        <div class="col-xs-3 ar">
                            <img class="team-logo" src="url"></div>
                            <div class="col-xs-2 al">
                                <h4 class="loss">(NA)<br>
                                    <span class="team-name">Team1</span>
                                    <br>
                                    <span class="win spoiler-wrap">0</span>
                                </h4>
                            </div>
                            <div class="col-xs-2">
                                <img class="league-logo" src="url">
                                <h4> V.S.</h4>
                            </div> 
                            <div class="col-xs-2 ar">
                                <h4 class="">(NA)<br>
                                    <span class="team-name">Team2</span>
                                    <br>
                                    <span class="win spoiler-wrap">4</span>
                                </h4>
                            </div>

这是我在网站上使用的 HTML 示例。

【问题讨论】:

  • XPath 应该可以。请提供数据样本并告诉我们您正在寻找的具体元素。蒙着眼睛很难工作。
  • 我继续更新问题以提供更多信息。
  • 好的。帖子如下。希望我能完全理解您的要求。

标签: xpath web-scraping puppeteer


【解决方案1】:

是的,div class="day-wrap" 可以有不同数量的孩子。但我认为这不是问题。

您想获取所有火箭联赛比赛的比赛时间。正如您所注意到的,游戏时间位于 h3 元素中。您可以使用以下 XPath 之一直接访问它:

//div[@id="section-content"]//h3
//div[@class="day-wrap"]//h3
//div[contains(@class,"match region")]//h3

如果你想要一个循环的东西,那么你可以试试:

(//div[@class="day-wrap"]//h3)[i]

其中 i 是要递增的数字(从 1 到 x)。

旁注:您的示例数据看起来不正确(根据您的 XPath)。你有一个结束 div 第 2 行,你似乎在 div class="matches" 之前省略了 div class="row middle-xs center-xs weeks"。

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 2023-03-22
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多