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

使用BeautifulSoup爬取邮箱返回None的问题求助

解决BeautifulSoup爬取邮箱返回None的问题

问题分析与修复点:

  • CSS选择器用法错误:你用soup.find('a[href^="mailto"]')的写法不符合BeautifulSoup的API规范,find()不直接支持这种CSS属性选择器,得换用select_one()或者通过属性匹配的方式查找。
  • 未限定查找范围:循环details容器时,你始终用全局soup找邮箱,而不是在当前的detail节点内查找,这会导致重复查找或遗漏目标内容。
  • 静态请求拿不到动态内容:目标网站的详情页可能依赖JavaScript渲染邮箱信息,requests.get()只能获取静态HTML,无法拿到动态加载的内容,得用Selenium统一处理页面加载。

修正后的代码:

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from time import sleep

headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
}
base_url='https://www.avocats-lille.com/'
url = 'https://www.avocats-lille.com/fr/annuaire/avocats-du-tableau-au-barreau-de-lille?view=entries'

# 初始化Chrome驱动(用webdriver-manager自动管理,避免路径问题)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get(url)
soup = BeautifulSoup(driver.page_source, "html.parser")
tra = soup.find_all('h2',class_='title')
productlinks=[]

for links in tra:
    for link in links.find_all('a',href=True):
        # 优化链接拼接,避免重复斜杠
        comp = base_url.rstrip('/') + '/' + link['href'].lstrip('/')
        productlinks.append(comp)
        
for link in productlinks:
    # 用Selenium加载详情页,确保拿到动态渲染内容
    driver.get(link)
    sleep(3)  # 等待页面加载完成
    soup=BeautifulSoup(driver.page_source, 'html.parser')
    
    details=soup.find_all("div",class_="item col-5")
    for detail in details:
        # 用select_one结合CSS选择器查找邮箱链接
        email = detail.select_one('a[href^="mailto"]')
        if email:
            # 提取纯邮箱地址,移除mailto:前缀
            print(email.get('href').replace('mailto:', ''))
        else:
            print("当前条目未找到邮箱")

driver.quit()  # 关闭浏览器

关键修改说明:

  1. 驱动管理优化:用webdriver-manager自动下载匹配版本的Chrome驱动,避免手动指定路径的兼容性问题。
  2. 链接拼接修复:处理链接首尾的斜杠,避免生成无效的重复斜杠链接。
  3. 统一用Selenium加载页面:确保获取到JavaScript渲染后的完整页面内容,解决静态请求拿不到动态数据的问题。
  4. 限定查找范围:在每个detail节点内查找邮箱,避免全局重复查找。
  5. 判空处理:添加邮箱存在性判断,避免空值报错,同时直接提取纯邮箱字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:06:15