使用Beautiful Soup爬取网页无法捕获全部信息,如何获取完整页面?
解决OpenReview页面无法获取完整内容的问题
嘿,我之前也踩过OpenReview这个坑!你遇到的问题本质是:OpenReview的会议页面是动态渲染的——你用requests.get()拿到的只是页面的基础框架,大部分出版物和对应的链接都是通过JavaScript在页面加载后才动态生成的,所以静态解析自然拿不到全部数据。
下面给你两个靠谱的解决方案:
方案一:用Selenium模拟浏览器加载(快速上手)
Selenium会真正打开浏览器,等页面所有动态内容加载完成后再抓取完整源码,这样就能拿到你需要的所有出版物和链接了。
步骤:
- 先安装依赖:
pip install selenium,然后下载对应浏览器的驱动(比如ChromeDriver,要和你的Chrome版本匹配) - 示例代码:
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options import time # 配置Chrome无头模式(不弹出浏览器窗口) chrome_options = Options() chrome_options.add_argument("--headless=new") # 启动浏览器 driver = webdriver.Chrome(options=chrome_options) url = 'https://openreview.net/group?id=ICLR.cc/2018/Conference' driver.get(url) # 等待页面加载完成(可以根据网络情况调整时间,或者用更智能的显式等待) time.sleep(3) # 获取完整的页面源码 source = driver.page_source soup = BeautifulSoup(source, 'html.parser') # 提取所有出版物和链接 publications = soup.find_all('div', class_='note') for pub in publications: title = pub.find('h4', class_='note-title').text.strip() relative_link = pub.find('a', href=True)['href'] full_link = f"https://openreview.net{relative_link}" print(f"标题: {title}\n链接: {full_link}\n") # 记得关闭浏览器 driver.quit()
方案二:调用OpenReview官方API(更稳定靠谱)
其实OpenReview提供了官方的Python API,直接调用API拿数据比解析HTML高效太多,不仅能避开动态加载的问题,还能拿到结构化的数据,完全不用纠结HTML解析的细节。
步骤:
- 安装官方包:
pip install openreview-py - 示例代码:
import openreview # 初始化客户端(公开数据不需要登录) client = openreview.Client(baseurl='https://api.openreview.net') # 获取ICLR 2018会议的所有盲审提交论文 notes = client.get_notes(invitation='ICLR.cc/2018/Conference/-/Blind_Submission') # 遍历提取标题和论文链接 for note in notes: title = note.content['title'] paper_link = f"https://openreview.net/forum?id={note.id}" print(f"标题: {title}\n链接: {paper_link}\n")
小提示:
- 方案一适合快速验证,但要注意浏览器驱动的版本匹配,而且频繁请求可能会触发网站的反爬限制;
- 方案二更推荐,官方API的数据结构清晰,获取的信息更准确,也不会有动态加载的困扰。
内容的提问来源于stack exchange,提问作者AJ1225
相关产品推荐
相关产品推荐

