使用BeautifulSoup爬取网页时返回空数据列表的问题求助
问题排查与解决方案
1. 修正请求URL
你当前使用的URL https://usautosummit.com/delegates/?/wp-login 包含多余的 ?/wp-login 后缀,这会引导到登录页面而非参会者列表页面。请将URL修改为 https://usautosummit.com/delegates/ 后重新测试:
from bs4 import BeautifulSoup from csv import writer import pandas as pd import requests headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'} url = 'https://usautosummit.com/delegates/' # 修正后的URL r = requests.get(url, headers=headers) print(r.status_code) soup = BeautifulSoup(r.text, 'html.parser') items = soup.find_all('p', {'class': 'x-feature-box-text'}) print(items)
2. 处理动态渲染内容
如果修正URL后仍返回空列表,说明页面内容是通过JavaScript动态加载的(requests 仅能获取静态HTML源码,无法渲染JS生成的内容)。此时需要使用Selenium模拟浏览器行为获取完整页面:
步骤1:安装依赖
pip install selenium
同时下载对应浏览器的驱动(如ChromeDriver),确保驱动路径可被Python调用。
步骤2:使用Selenium获取并解析页面
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options import time # 配置无头浏览器选项 chrome_options = Options() chrome_options.add_argument('--headless') 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/107.0.0.0 Safari/537.36') # 初始化浏览器并加载页面 driver = webdriver.Chrome(options=chrome_options) driver.get('https://usautosummit.com/delegates/') time.sleep(3) # 等待页面动态内容加载完成 # 解析页面源码 soup = BeautifulSoup(driver.page_source, 'html.parser') items = soup.find_all('p', {'class': 'x-feature-box-text'}) # 提取职位与公司信息 for item in items: position = item.find('strong').text.strip() company = item.find('em').text.strip() print(f"职位: {position}, 公司: {company}") # 关闭浏览器 driver.quit()
3. 验证选择器有效性
若以上方案仍不生效,可通过以下方式确认选择器是否正确:
- 打开目标页面按F12进入开发者工具
- 使用元素选择器定位目标
<p class="x-feature-box-text">元素,确认其存在于渲染后的DOM中(注意区分静态源码和动态生成的内容)
内容的提问来源于stack exchange,提问作者Pinal
相关产品推荐
相关产品推荐

