Python拆分网页链接并通过for循环批量爬取邮箱
批量爬取多页面邮箱的解决方案
这里我们可以通过格式化URL字符串,结合for循环来遍历你指定的数字范围(50到5000),同时优化脚本的稳定性和结果去重(避免重复邮箱)。
修改后的完整代码
from selenium import webdriver import re # 初始化浏览器驱动(注意:如果你的Chrome版本较新,建议用webdriver-manager自动管理驱动) driver = webdriver.Chrome("C:/Users/Sam/Downloads/chromedriver_win32/chromedriver.exe") # 用集合存储所有爬取到的邮箱,自动实现去重 all_emails = set() # 遍历50到5000的数字(range是左闭右开,所以结束值写5001) for org_id in range(50, 5001): # 用f-string格式化URL,替换掉原来固定的1488 url = f'https://stuactonline.tamu.edu/app/organization/profile/public/id/{org_id}' try: driver.get(url) doc = driver.page_source # 提取当前页面的邮箱 page_emails = re.findall(r'[\w\.-]+@[\w\.-]+', doc) # 将当前页面的邮箱添加到集合中 all_emails.update(page_emails) print(f"已完成ID {org_id} 的爬取,找到 {len(page_emails)} 个邮箱") except Exception as e: print(f"爬取ID {org_id} 时出现错误: {str(e)}") continue # 关闭浏览器释放资源 driver.quit() # 输出所有去重后的邮箱 print("\n所有爬取到的邮箱:") for email in all_emails: print(email)
关键修改点说明
- URL动态生成:使用Python的f-string语法
f'...{org_id}',能快速把循环中的数字插入到URL末尾,替代原来固定的1488,实现批量遍历页面。 - 去重处理:用
set()存储邮箱,这样即使不同页面出现相同邮箱,也只会保留一条记录。 - 异常捕获:添加
try-except块,避免单个页面加载失败导致整个脚本崩溃,同时能输出错误信息方便排查问题。 - 循环范围:
range(50, 5001)会生成从50到5000的所有整数(因为range是左闭右开区间)。
额外优化建议
- 如果你的Chrome浏览器经常更新,手动指定驱动路径容易出现版本不兼容问题,推荐用
webdriver-manager自动管理驱动:- 先安装库:
pip install webdriver-manager - 修改驱动初始化代码:
from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
- 先安装库:
- 可以添加适当的等待时间(比如
time.sleep(1)或者Selenium的显式等待),避免请求过于频繁被网站拦截。
内容的提问来源于stack exchange,提问作者Plattering
相关产品推荐
相关产品推荐

