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




