【问题标题】:Scrape an dynamically row table using Python, Selenium and XPath使用 Python、Selenium 和 XPath 抓取动态行表
【发布时间】:2017-11-07 13:33:50
【问题描述】:

我正在尝试在 Python 中使用 Selenium 和 XPath 进行抓取,以从表中获取“SIRET”行。 我尝试过不同类型的 XPath,但我做不到。 一个问题是“ class="reportRow" ”元素是动态变化的,它不能在位置编号之后被废弃。 “SIRET”原始值和他的“td class”子元素值,可以在“SIRET”文本之后或以其他方式报废吗?

这是我在访问网站时正在执行的手动步骤:

该站点仅包含根域。 通过登录数据访问该站点后,我输入一个搜索条件,该条件会打开一个页面,我必须在该页面上单击一个链接,该链接会打开一个带有表格的弹出窗口。 该表包含 4 行和 8 列,第一行包含列的名称,其他 3 行包含作为“SIRET”的数据。 这 3 行的位置会定期更改,具体取决于从特定服务器接收的数据。 这就是为什么我想用“SIRET”文本来消除那行和他的价值观。

我最终抓取的数据应如下所示:SIRET 646 90 0.2% $2.94 1.03 0.07 4.52。

非常感谢您的意见。

<div class="table_container">
<table>
    <tbody>
        <tr class="reportHead">.....</tr></tbody>
    <tbody>
        <tr class="reportRow  ">....</tr> 
        <tr class="reportRow  ">....</tr>
        <tr class="reportRow  ">
            <td data-actual="SIRET" class="reportKeyword">SIRET</td>
            <td class="td2">646</td>
            <td class="td1">90</td>
            <td class="rcr">0.2%</td>
            <td class="td1">$2.94</td>
            <td class="td1">1.03</td>
            <td class="td1">0.07</td>
            <td class="td1 rctl">4.52</td>
        </tr>
    </tbody>
    <tfoot style="display: none;">....</tfoot>
</table>

【问题讨论】:

  • 我的意思是你的输出需要 python 代码
  • 你能分享你的代码试验吗?
  • class="reportKeyword" 我猜这应该修复
  • 感谢您的回复。我无法共享整个鳕鱼,因为代码包含登录数据。我已经更新了这个问题,以便更清楚我想要获得什么。非常感谢您的意见。

标签: python selenium xpath


【解决方案1】:

你可以像这样使用xpath

SIRET= driver.find_element_by_xpath("//td[@data-actual='SIRET']")

那么就可以使用.text操作获取文字了

如果数据是动态变化的,那么你必须使用

SIRET= driver.find_element_by_xpath("//td[@class='reportKeyword']")

【讨论】:

  • 您好 iamsankalp89,感谢您的回复。我已经尝试过你的 Xpath。第一个返回“SIRET”文本,第二个返回另一行“data-actual”文本。我需要的是他的价值观所在的“SIRET”行。请阅读更新的问题。非常感谢您的宝贵时间,并为更新迟到表示歉意。非常感谢。
【解决方案2】:

如果我正确理解了这个问题,您正试图从动态变化的&lt;td&gt; 节点获取字符串"SIRET"。为此,您可以使用以下代码行:

print(driver.find_element_by_xpath("//td[@class='reportKeyword']").get_attribute("innerHTML"))

【讨论】:

  • 嗨,DebanjanB,感谢您的回复。您的 Xpath 它返回第一个“tr 类”并且没有“td 类”值。我需要带有“Siret”文字的那个……非常感谢您的努力。
  • 嗨,DebanjanB,我尝试了新的 Xpath,但我收到的第一行不是我需要的。
  • SIRET 文本位于 &lt;td data-actual="SIRET" class="reportKeyword"&gt;SIRET&lt;/td&gt;,您现在可以检索它。你在看别的东西吗?你能用你确切的手动步骤更新问题吗?
  • 您好 DebanjanB,感谢您的意见。我已经使用手动步骤更新了问题。我想刮掉整行,“td data”和“td classes”值,而不仅仅是“SIRET”文本。我最终抓取的数据应如下所示:SIRET 646 90 0.2% $2.94 1.03 0.07 4.52。现在还好吗?
【解决方案3】:

奇怪。事实上,解决方案并不复杂:

driver.find_element_by_xpath("//td[@data-actual='SIRET']/../td")

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2014-04-25
    • 2012-01-28
    • 2020-12-29
    • 2023-01-25
    • 2015-11-03
    • 2020-02-26
    • 1970-01-01
    • 2020-10-14
    相关资源
    最近更新 更多