在 Raspberry Pi 4 上使用 requests-html 进行抓取失败,并出现 OSError:[Errno 8] Exec 格式错误

问题描述 投票:0回答:1

这是我试图实现的目标:我有一个带有 Pimoroni Inky Frame 的 Raspberry Pi 4。我想将其用于赞助活动(Tour for Life)以显示最近的赠款金额。 此赠品金额可在此页面上找到:https://www.tourforlife.nl/de-rollende-rijders

在我的 Macbook 上,我使用了带有 requests-html 的 Python 代码来抓取网站并获取 Gifted-Amount 类。所以刮擦有效。

然后我将代码带到我的 Raspberry Pi,然后问题就开始了。

这是我的 Python 代码片段:

import requests
from bs4 import BeautifulSoup
from requests_html import HTMLSession
from PIL import Image, ImageFont, ImageDraw

def get_donation_amount():
    """ Get the donation amount from the Tour for Life website

    Returns:
        float: The donation amount
    """
    url = "https://www.tourforlife.nl/de-rollende-rijders"

    session = HTMLSession()
    response = session.get(url)
    response.html.render()
    gift_amount = response.html.find('.gift-amount')[0].text
    # remove euro sign and convert to float
    gift_amount = float(gift_amount[2:].replace(",", "."))
    return gift_amount

这就是输出:

python3 pidonationtracker.py
[INFO] Starting Chromium download.
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 183M/183M [00:17<00:00, 10.4Mb/s]
[INFO] Beginning extraction
[INFO] Chromium extracted to: /home/inky3/.local/share/pyppeteer/local-chromium/1181205
Traceback (most recent call last):
  File "/home/inky3/PythonProjects/pidonationtracker/src/pidonationtracker/pidonationtracker.py", line 59, in <module>
    donation_amount = get_donation_amount()
  File "/home/inky3/PythonProjects/pidonationtracker/src/pidonationtracker/pidonationtracker.py", line 23, in get_donation_amount
    response.html.render()
  File "/home/inky3/PythonProjects/pidonationtracker/.venv/lib/python3.9/site-packages/requests_html.py", line 586, in render
    self.browser = self.session.browser  # Automatically create a event loop and browser
  File "/home/inky3/PythonProjects/pidonationtracker/.venv/lib/python3.9/site-packages/requests_html.py", line 730, in browser
    self._browser = self.loop.run_until_complete(super().browser)
  File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/home/inky3/PythonProjects/pidonationtracker/.venv/lib/python3.9/site-packages/requests_html.py", line 714, in browser
    self._browser = await pyppeteer.launch(ignoreHTTPSErrors=not(self.verify), headless=True, args=self.__browser_args)
  File "/home/inky3/PythonProjects/pidonationtracker/.venv/lib/python3.9/site-packages/pyppeteer/launcher.py", line 307, in launch
    return await Launcher(options, **kwargs).launch()
  File "/home/inky3/PythonProjects/pidonationtracker/.venv/lib/python3.9/site-packages/pyppeteer/launcher.py", line 148, in launch
    self.proc = subprocess.Popen(  # type: ignore
  File "/usr/lib/python3.9/subprocess.py", line 951, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.9/subprocess.py", line 1823, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 8] Exec format error: '/home/inky3/.local/share/pyppeteer/local-chromium/1181205/chrome-linux/chrome'

现在我读了一些较旧的帖子(例如:在树莓派上运行 puppeteer 时出现 OSError ),这些帖子说 chromium 浏览器不是树莓派 ARM 芯片组的正确版本。其中很多帖子都是 2019 年及之前的,所以我不确定他们的解决方案是否仍然准确。

我尝试从这里再次安装 Chrome 驱动程序: https://sites.google.com/chromium.org/driver/

还是同样的错误。可能是因为 Puppeteer 正在寻找其他地方。

然后我读了这篇文章:https://github.com/miyakogi/pyppeteer/issues/250 这表示我应该安装 chromium-codecs-ffmpeg 和 chromium-browser (来自 https://launchpad.net/ubuntu/trusty/armhf/chromium-codecs-ffmpeghttps://launchpad.net/ubuntu/ trusty/armhf/chromium 浏览器)。这也是2018年的材料。但我必须尝试一些事情。

当我尝试使用这些命令安装它们时:

wget http://launchpadlibrarian.net/361669486/chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb
wget http://launchpadlibrarian.net/361669485/chromium-browser_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb

sudo dpkg -i chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb

..我遇到了依赖性问题:

Selecting previously unselected package chromium-codecs-ffmpeg.
dpkg: considering removing chromium-codecs-ffmpeg-extra in favour of chromium-codecs-ffmpeg ...
dpkg: no, cannot proceed with removal of chromium-codecs-ffmpeg-extra (--auto-deconfigure will help):
 rpi-chromium-mods depends on chromium-codecs-ffmpeg-extra
  chromium-codecs-ffmpeg-extra is to be removed.

dpkg: regarding chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb containing chromium-codecs-ffmpeg:
 chromium-codecs-ffmpeg conflicts with chromium-codecs-ffmpeg-extra
  chromium-codecs-ffmpeg-extra (version 120.0.6099.102-rpt1) is present and installed.

dpkg: error processing archive chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb (--install):
 conflicting packages - not installing chromium-codecs-ffmpeg
Errors were encountered while processing:
 chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb

所以这是我必须卸载的东西的列表:

sudo dpkg --remove --force-remove-reinstreq rpi-chromium-mods
sudo dpkg --remove --force-remove-reinstreq chromium-chromedriver
sudo dpkg --remove --force-remove-reinstreq chromium-browser-l10n
sudo dpkg --remove --force-remove-reinstreq chromium-browser

但是当我尝试卸载 chromium-browser 时,我得到了完整的依赖项列表:

dpkg: dependency problems prevent removal of chromium-browser:
 libreoffice-help-en-us depends on firefox-esr | epiphany-browser | konqueror | chromium | firefox; however:
  Package firefox-esr is not installed.
  Package epiphany-browser is not installed.
  Package konqueror is not installed.
  Package chromium is not installed.
  Package chromium-browser which provides chromium is to be removed.
  Package firefox is not installed.
 libreoffice-help-en-gb depends on firefox-esr | epiphany-browser | konqueror | chromium | firefox; however:
  Package firefox-esr is not installed.
  Package epiphany-browser is not installed.
  Package konqueror is not installed.
  Package chromium is not installed.
  Package chromium-browser which provides chromium is to be removed.
  Package firefox is not installed.

好吧,这变得很荒谬。我是否真的必须卸载 Firefox、Konqueror 和一整套其他东西才能安装旧版本的 chromium 编解码器,让 Puppeteer 采用正确版本的 Chromium。还是我走错方向了。

我也尝试过使用 Selenium 来代替。如果您想了解我失败的更多详细信息,我可以提供它们。它们也与铬相关。

或者这可能吗?这似乎是一个简单的任务。只需从网页上抓取一个浮动..

chromium raspberry-pi4 python-requests-html
1个回答
0
投票

我自己找到了解决方案。

我尝试使用以下命令安装 chromium 编解码器: sudo dpkg -i chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb

但这确实需要一个强制所有选项。像这样: wget https://launchpad.net/ubuntu/trusty/armhf/chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb sudo dpkg --force-all -i chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb

wget https://launchpad.net/ubuntu/trusty/armhf/chromium-browser_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb sudo dpkg --force-all -i chromium-browser_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb

那么你还没有完成。您需要将 puppeteer 使用的 chrome 浏览器链接到正确的 ARM 版本的 chromium。

所以检查 chromium 浏览器在哪里。 chrome 浏览器在哪里

结果可能如下所示: 铬浏览器: /usr/bin/chromium-browser /usr/lib/chromium-browser /etc/chromium-browser /usr/share/chromium-browser /usr/share/man/man1/chromium-browser.1.gz

现在转到 OSError: [Errno 8] 错误中找到的路径: cd /home/inky3/.local/share/pyppeteer/local-chromium/1181205/chrome-linux/

并链接到 chromium 浏览器: ln -s /usr/bin/chromium-browser chrome

突然我的抓取命令开始工作了。

解决了 Inky - numpy 相关问题后,有: enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.