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

Colab运行dryscrape爬虫时已安装xvfb仍提示找不到是什么原因?

问题根因

报错的核心原因是你仅安装了Python侧的xvfbwrapper依赖,没有安装系统层面的Xvfb二进制程序及相关X11运行依赖,dryscrape调用系统可执行文件时找不到对应程序触发报错。此外你的代码存在重复启动Xvfb、重复创建会话的逻辑问题,也会引发运行异常。

修复步骤
  • 第一步:先安装系统级的Xvfb及相关依赖,在Colab代码块最开头执行如下命令:
!apt update
!apt install -y xvfb libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0
  • 第二步:调整代码逻辑,将dryscrape.start_xvfb()和会话创建逻辑移到for循环外,避免重复启动和创建。
修正后完整代码
# 系统依赖安装
!apt update
!apt install -y xvfb libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0

# Python依赖安装
!pip install git+https://github.com/niklasb/webkit-server.git@refs/pull/35/head
!pip install dryscrape beautifulsoup4 requests xvfbwrapper

# 导入依赖
from xvfbwrapper import Xvfb
from datetime import datetime
import dryscrape 
from bs4 import BeautifulSoup
import requests

# 提前启动Xvfb,仅执行一次即可
dryscrape.start_xvfb()
# 提前创建会话,复用即可提升爬取效率
session = dryscrape.Session() 

olderNews = False
stories_list = []

for i in range(0, 450):
    url = "https://www.efsyn.gr/search?created%5B0%5D=2021-01-01&created%5B1%5D=2021-09-13&field_anonymous_author=&field_author=All&field_category=All&keywords=covid&sort_by=created&page=" + str(i)
    session.visit(url)
    response = session.body()
    doc = BeautifulSoup(response)

    stories = doc.findAll('article', { 'class': 'default-teaser__article' })
    print(stories)
    for story in stories: 
       dt = story.find('time', {'class': "default-teaser__date default-date"})
       print(dt.text)
       parsed_dt = datetime.strptime(dt.text, "%d.%m.%Y, %H:%M")
       print(parsed_dt)
       if parsed_dt.date() >= datetime(2021, 1, 1).date():
          headline = story.find('div', {'class': 'default-teaser__title'})
          link = story.find('a', {'class': 'full-link'})
          abstract = story.find('div', {'class': 'default-teaser__summary'})

          story_dict = {
             "headline": headline.text.strip(),
             "url": link['href'].replace('\r', ''),
              "summary": abstract.text.replace('\r', '').replace('\n', ''),
              "date": parsed_dt.strftime('%d.%m.%Y').replace('\n', '')
          }
          stories_list.append(story_dict)
          print(story_dict, sep='\n')
          print("===")
       else:
          print("END OF SCRAPING")
          olderNews = True
          break 

    if olderNews:
          break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:21:01