在Google Colab中爬取世界银行项目详情遇问题,求解决方案及简便方法
在Google Colab爬取世界银行项目详情的问题解决&简便方案
一、修复Selenium启动报错问题
你之前的代码是旧版Selenium写法,新版本已弃用直接传驱动路径的方式,改用Service类配置。替换成下面的代码即可解决启动报错:
!pip install selenium !apt-get update !apt install chromium-chromedriver !cp /usr/lib/chromium-browser/chromedriver /usr/bin from selenium import webdriver from selenium.webdriver.chrome.service import Service chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') # 用Service指定驱动路径,参数名从chrome_options改为options service = Service('/usr/bin/chromedriver') wd = webdriver.Chrome(service=service, options=chrome_options)
二、BeautifulSoup拿不到表格内容的原因
世界银行项目列表页是Angular动态渲染的,你用requests请求到的静态HTML里没有表格数据,因此BeautifulSoup无法抓取到内容。
三、更简便的方案:直接调用官方API
世界银行提供了公开的项目API,比爬虫稳定高效,无需处理动态页面。直接用requests请求就能拿到所有项目的结构化数据,示例代码:
import requests import pandas as pd base_url = "https://search.worldbank.org/api/v2/projects" params = { "format": "json", "rows": 100, # 每页最多返回100条数据 "os": 0 # 起始偏移量,从0开始 } all_projects = [] # 循环分页获取所有数据 while True: resp = requests.get(base_url, params=params) data = resp.json() project_list = data.get("projects", {}).get("project", []) if not project_list: break # 没有更多数据就停止 all_projects.extend(project_list) params["os"] += params["rows"] # 偏移量累加,取下一页 # 转成DataFrame,方便查看和后续处理 project_df = pd.DataFrame(all_projects) print(project_df[["project_name", "id", "countryshortname", "totalamt"]].head())
返回的JSON包含项目标题、编号、国家、总金额、项目描述等所有详情,直接提取对应字段即可。
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

