用 set 去除爬虫结果中的重复包裹状态
抓取 FedEx 多包裹页面时,同一状态可能在 DOM 中出现多次。用列表 append 会原样保留重复;改成 set 即可去重。
改法
from bs4 import BeautifulSoup
def summarize_piece_shipment(page_html: str) -> str:
soup = BeautifulSoup(page_html, "html.parser")
piece_shipment = soup.find("h2", string=lambda t: t and "Piece Shipment" in t)
if not piece_shipment:
return "否"
undelivered = set()
all_delivered = True
for package in soup.find_all("tr", class_="fdx-c-table__tbody__tr"):
link = package.find("a", class_="fdx-u-color--blue")
status_el = package.find("div", class_="shipment-status__key")
if not link or not status_el:
continue
no, status = link.text.strip(), status_el.text.strip()
if status != "Delivered":
all_delivered = False
undelivered.add(f"{no}: {status}")
return "该货件的其它包裹全部送达" if all_delivered else ", ".join(sorted(undelivered))
要点
- 集合用
add,不要用append。 - 输出前
sorted(...)可让结果稳定,便于日志对比。 - 去重键建议包含“单号 + 状态”,避免不同包裹被误合并。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 HT Notes