Python脚本使用set去除重复信息
我来帮你修改代码。这个问题出现在处理 FedEx 多件货物信息的部分。让我们修改 process_fedex 函数中处理多件货物的部分,使用集合(set)来去除重复信息。以下是修改后的代码片段:
python
def process_fedex(driver, tracking_number):
if len(tracking_number) == 10:
tracking_url = f"https://www.fedex.com/fedextrack/?trknbr={tracking_number}&trkqual=~{tracking_number}~FDFR"
else:
tracking_url = f"https://www.fedex.com/fedextrack/?trknbr={tracking_number}&trkqual=12028~{tracking_number}~FDEG"
print(f"访问FedEx追踪URL: {tracking_url}")
if load_page(driver, tracking_url):
page_html = driver.page_source
soup = BeautifulSoup(page_html, 'html.parser')
# 检查是否存在多件货物
piece_shipment = soup.find('h2', string=lambda text: text and 'Piece Shipment' in text)
if piece_shipment:
# 存在多件货物
packages = soup.find_all('tr', class_='fdx-c-table__tbody__tr')
all_delivered = True
undelivered_packages = set() # 使用集合而不是列表
for package in packages:
tracking_link = package.find('a', class_='fdx-u-color--blue')
if tracking_link:
package_tracking_number = tracking_link.text.strip()
status_element = package.find('div', class_='shipment-status__key')
if status_element:
status = status_element.text.strip()
if status != 'Delivered':
all_delivered = False
undelivered_packages.add(f"{package_tracking_number}: {status}")
if all_delivered:
other_packages_info = "该货件的其它包裹全部送达"
else:
other_packages_info = ", ".join(undelivered_packages) # 转换集合为字符串
else:
# 不存在多件货物
other_packages_info = "否"
# 获取主包裹的状态信息
status_info = extract_delivered_time_fedex(page_html)
return status_info, tracking_url, other_packages_info
else:
return "加载FedEx页面失败", None, "否"主要的改动是:
将
undelivered_packages从列表改为集合 (set)使用
add方法而不是append来添加包裹信息在最后转换为字符串时,集合会自动去除重复的信息
这样修改后,即使页面上有重复的信息,最终输出的结果也只会包含一份唯一的信息。比如对于你的例子,现在应该只会输出一次:
txt
779303582872 (master): On the way, 779303582883: Delivery updated, 779303582894: Delivery updated, 779303582909: Delivery updatedclaude-3-5-sonnet-20240620
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果