【问题标题】:Python 3 BeautifulSoup4 Selecting specific <td> tags from each <tr>Python 3 BeautifulSoup4 从每个 <tr> 中选择特定的 <td> 标签
【发布时间】:2022-03-01 05:07:02
【问题描述】:

我正在以这种格式从 HTML 表格中抓取:

<table>

    <tr>
        <th>Name</th>
        <th>Date</th>
        <th>Number</th>
        <th>Address</th>

    </tr>

    <tr> 1

        <td> Name-1 </td>
        <td> Date-1 </td>
        <td> Number-1 </td>
        <td> Address-1 </td>

    </tr>

    <tr> 2

        <td> Name-2 </td>
        <td> Date-2 </td>
        <td> Number-2 </td>
        <td> Address-2 </td>

    </tr>

</table>

这是该页面上唯一的表格。我想将每个 TD 标签与其相应的 TH 标签信息一起存储以制作一个列表,然后最终将其保存到 CSV 中。实际信息不使用 -number 保存,这只是为了说明。数据有数百个表格行,所有表格中的数据都以这种方式格式化。

基本上,我想让“名称”成为每个 TR 行中的第一个 TD 单元格,日期是第二个,依此类推。

我似乎找不到使用 Python3 和 BeautifulSoup4 的方法,我知道有一种方法,我只是太新了。

感谢大家的帮助,我学到了很多东西。

【问题讨论】:

    标签: python html python-3.x


    【解决方案1】:

    假设数据是统一的,下面的基本示例应该可以工作:

    table_rows = soup.find_all("tr") #list of all <tr> tags
    for row in table_rows:
        cells = row.find_all("td") #list of all <td> tags within a row
        if not cells: #skip rows without td elements
            continue
        name, date, number, address = cells #unpack list of <td> tags into separate variables
    

    【讨论】:

      【解决方案2】:

      我也有类似的问题。 sytech 的脚本正在运行。虽然,例如,一个有 100 行的表,我的代码将首先显示第 15 行而不是 html 中出现的第一行,然后显示第 16 行,第 17 行...第 100 行,第 1 行,第 2 行。使用 Clive 的上面的代码,我会得到以下内容:

      [&lt;td&gt; Name-15 &lt;/td&gt;, &lt;td&gt; Date-15 &lt;/td&gt;,&lt;td&gt; Number-15 &lt;/td&gt;, &lt;td&gt; Address-15 &lt;/td&gt;] [&lt;td&gt; Name-16 &lt;/td&gt;, &lt;td&gt; Date-16 &lt;/td&gt;,&lt;td&gt; Number-16 &lt;/td&gt;, &lt;td&gt; Address-16 &lt;/td&gt;] [&lt;td&gt; Name-16 &lt;/td&gt;, &lt;td&gt; Date-16 &lt;/td&gt;,&lt;td&gt; Number-16 &lt;/td&gt;, &lt;td&gt; Address-16 &lt;/td&gt;] etc... [&lt;td&gt; Name-100 &lt;/td&gt;, &lt;td&gt; Date-100 &lt;/td&gt;,&lt;td&gt; Number-100 &lt;/td&gt;, &lt;td&gt; Address-100 &lt;/td&gt;] [&lt;td&gt; Name-1 &lt;/td&gt;, &lt;td&gt; Date-1 &lt;/td&gt;,&lt;td&gt; Number-1 &lt;/td&gt;, &lt;td&gt; Address-1 &lt;/td&gt;]

      知道为什么它不会从第一行开始吗? 如果格式错误,请致歉,并感谢您的帮助!

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
      猜你喜欢
      • 2019-03-31
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多