将没有表格的抓取数据保存到 pandas

Saving scraped data with no tables into pandas

大家好我有一个网站,我需要将数据保存到 excel 页面中。但是数据不是我通常使用 pandas 处理的 table 格式。下面是我举的网站的一部分。连同我用来提取准确信息的代码 need/want.

from bs4 import BeautifulSoup


html_doc = """
<div class="col-md-4">
    <p>
      <span class="text-muted">Order Number</span><br>
      A-21-897274
    </p>
</div>
<div class="col-md-4">
  <p>
    <span class="text-muted">Location</span><br>
    Ohio
  </p>
</div>
  <div class="col-md-4">
    <p>
      <span class="text-muted">Date</span><br>
      07/01/2022
    </p>
  </div>
</div>
"""

soup = BeautifulSoup(html_doc, "html.parser")


def correct_tag(tag):
    return tag.name == "span" and tag.get_text(strip=True) in {
        "Order Number",
        "Location",
        "Date",
    }


for t in soup.find_all(correct_tag):
    print(f"{t.text}: {t.find_next_sibling(text=True).strip()}")

这非常有效,可以提取我想要的数据,如下所示:

Order Number: A-21-897274
Location: Ohio
Date: 07/01/2022

我只需要帮助将这些数据放入数据框中以保存 excel。如有任何帮助,我们将不胜感激!

将数据存储为 dict。如果您有很多订单,请将它们附加到 list。最后,将列表转换为 dataframe.

import pandas as pd

order_list = []
order_info = {}

for t in soup.find_all(correct_tag):
    order_info[t.text] = t.find_next_sibling(text=True).strip()

# assume you have many orders (append to list first)
order_list.append(order_info)

order_df = pd.DataFrame(order_list)
order_df.head()

输出:

  Order Number    Location    Date
0 A-21-897274     Ohio        07/01/2022