You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python网页爬取问题:无法提取大学体育部网站邮箱

爬取邮箱问题排查与解决方案

问题分析

  1. URL读取逻辑错误:当前读取websites.txt的方式会逐个字符读取文件内容,拆分后可能生成格式混乱的url列表,导致请求无效。
  2. 页面可能动态渲染:该网站的邮箱信息大概率通过JavaScript动态加载,requests.get()仅能获取静态HTML源码,无法捕获动态生成的内容。
  3. 元素选择逻辑单一:仅通过headers属性定位单个元素,既没考虑页面存在多个邮箱的情况,也容易因页面结构细微变动失效。

修正步骤

1. 修复URL读取代码

替换为正确的逐行读取方式,过滤空行并确保url格式有效:

with open('websites.txt', 'r') as f:
    urls = [line.strip() for line in f if line.strip()]

2. 验证页面加载方式

先打印响应的HTML源码,检查是否包含邮箱内容:

res = requests.get(url)
print(res.text)  # 在输出中搜索@xxx.com格式的邮箱字符串

如果输出里找不到邮箱,说明内容是动态生成的,改用Selenium模拟浏览器加载页面:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome()  # 需提前安装ChromeDriver并配置环境变量
for url in urls:
    driver.get(url)
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    email_tds = soup.find_all('td', headers="col-staff_email category-0")
    for td in email_tds:
        if td.a:
            print(td.a.get_text(strip=True))
driver.quit()

3. 优化静态页面的元素选择

如果页面是静态渲染的,调整选择逻辑遍历所有邮箱元素:

for url in urls:
    res = requests.get(url)
    soup = BeautifulSoup(res.text, 'html.parser')
    try:
        email_tds = soup.find_all('td', headers="col-staff_email category-0")
        for td in email_tds:
            if td.a:
                print(td.a.text.strip())
    except Exception as e:
        print(f"This url didn't work: {url}")

内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 05:06:27