You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python Selenium提取邮箱存入列表异常,如何正确存储完整邮箱

解决Python Selenium提取网页邮箱时列表存储错误的问题

你遇到的问题根源在于列表操作方法用错啦!咱们一步步来解决:

问题分析

你代码里的list_new.extend(str(email))是核心问题——extend()方法会把传入的可迭代对象(比如字符串)拆成单个元素逐个添加到列表。举个例子,当你传入"call.del@airindia.in"时,它会把每个字符'c''a''l'...都当成独立元素塞进列表,这就是你得到一堆单个字符的原因。

而你需要的是把整个邮箱字符串作为一个完整元素添加到列表,这时候应该用append()方法。

修正后的完整代码

import os
import re
from selenium import webdriver

chrome_driver_path = os.path.abspath('..') + "\\Drivers\\chromedriver.exe"
driver = webdriver.Chrome(chrome_driver_path)
driver.maximize_window()
driver.get("http://www.airindia.in/contact-details.htm")
driver.implicitly_wait(3)

doc = driver.page_source
# 用正则提取页面中的邮箱
emails = re.findall(r'[\w\.-]+@[\w\.-]+', doc)
list_new = []

for email in emails:
    # 用append添加完整的邮箱字符串,替代拆分字符的extend
    list_new.append(email)

print("total emails - ", len(list_new))
print(list_new)

driver.quit()

额外优化建议

如果页面里存在重复的邮箱,你可以快速去重:

  • 简单去重(会打乱原始顺序):
list_new = list(set(emails))
  • 保持原始顺序去重(Python 3.7及以上版本支持):
list_new = list(dict.fromkeys(emails))

这样运行后,你就能得到期望的['call.del@airindia.in','airindiaretros.ai@iclployalty.com']这类结果啦!

内容的提问来源于stack exchange,提问作者venkatesh

火山引擎 最新活动