Web Scraping技术问题:如何遍历多div获取name-plate下的企业名称?
爬取memberleap企业目录的解决方案
问题原因
你的代码返回空列表,核心原因是直接发起的请求缺少必要的请求头,服务器识别为非浏览器访问,返回的页面不含目标内容,导致BeautifulSoup无法定位到name-plate类的元素。
解决方案1:添加请求头模拟浏览器访问
通过给requests.get()添加User-Agent请求头,模拟正常浏览器访问,大概率能获取到完整的页面内容。修改后的代码如下:
import requests from bs4 import BeautifulSoup url = 'https://www.memberleap.com/members/directory/search_csam.php' # 模拟Chrome浏览器的请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } # 发起带请求头的请求 page = requests.get(url, headers=headers) soup = BeautifulSoup(page.text, 'lxml') # 提取所有企业板块 name_plates = soup.find_all('div', class_='name-plate') company_list = [] for plate in name_plates: # 提取企业名称和对应链接 anchor = plate.find('a') if anchor: company_name = anchor.get_text(strip=True) company_href = anchor['href'] # 提取企业简介(假设简介在板块内的p标签中) company_desc = plate.find('p').get_text(strip=True) if plate.find('p') else '无简介' company_list.append({ '企业名称': company_name, '详情链接': company_href, '企业简介': company_desc }) # 打印结果 for company in company_list: print(f"【企业名称】{company['企业名称']}\n【详情链接】{company['详情链接']}\n【企业简介】{company['企业简介']}\n---")
解决方案2:处理动态加载内容(如果方案1无效)
如果网站内容是通过JavaScript动态渲染的,仅靠requests无法获取到完整内容,此时需要用selenium模拟浏览器加载页面:
- 先安装依赖:
pip install selenium
- 下载对应浏览器的驱动(如Chrome的chromedriver,需与浏览器版本匹配),然后运行以下代码:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from bs4 import BeautifulSoup import time url = 'https://www.memberleap.com/members/directory/search_csam.php' # 配置Chrome无头模式(后台运行浏览器) chrome_options = Options() chrome_options.add_argument('--headless=new') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36') # 初始化浏览器驱动 driver = webdriver.Chrome(options=chrome_options) driver.get(url) # 等待3秒,确保页面动态内容加载完成(可根据实际情况调整时间) time.sleep(3) # 解析渲染后的页面 soup = BeautifulSoup(driver.page_source, 'lxml') name_plates = soup.find_all('div', class_='name-plate') company_list = [] for plate in name_plates: anchor = plate.find('a') if anchor: company_name = anchor.get_text(strip=True) company_href = anchor['href'] company_desc = plate.find('p').get_text(strip=True) if plate.find('p') else '无简介' company_list.append({ '企业名称': company_name, '详情链接': company_href, '企业简介': company_desc }) # 关闭浏览器 driver.quit() # 打印结果 for company in company_list: print(f"【企业名称】{company['企业名称']}\n【详情链接】{company['详情链接']}\n【企业简介】{company['企业简介']}\n---")
注意事项
- 爬取前请查看网站的
robots.txt文件,确认允许爬取的内容范围 - 避免高频次请求,防止触发网站反爬机制导致IP被封禁
- 如果使用
selenium,注意驱动版本需与浏览器版本一致
内容的提问来源于stack exchange,提问作者codingcat
相关产品推荐
相关产品推荐

