Headless Chrome:网站 Div 内容到 Text、toString 或 ASCII

Headless Chrome: website Div content to Text, toString or ASCII

我想从需要动态抓取的动态加载网站抓取文本。由于动态加载,$ lynx --dump google.com 等选项似乎不起作用。为此,我使用了 Headless Chrome 这样

$ Chrome --headless --disable-gpu --no-sandbox --run-all-compositor-stages-before-draw --virtual-time-budget=1000 --window-size=1200,3000 --screenshot http://mtv.com

但我找不到从网站上删除文本的选项。我可以使用所有动态抓取选项来获取特定 div 的文本,例如 class。

如何从动态加载的网站中换行文字?

使用无头动态加载的示例结果chrome

最好的方法是直接从网站中提取文本。

如果找不到其他方法,请使用 OCR(光学字符识别)提取文本,按照问题中提供的 Headless Chrome 解决方案。

屏幕截图中的错误选项 OCR

$ brew install imagemagick

$ brew install tesseract

$ convert input.png -resize 400% -type Grayscale input.tif

$ tesseract -l eng input.tif output

您可以在其中使用 Regex 查找单独的文本片段。否则,OCR 输出是准确的但没有组织,使得以后难以使用,导致识别不准确。

如果你会为 Node.js 编写 JS,你可以尝试 puppeteer、Node.js 库来管理 headless Chrome:

'use strict';

const puppeteer = require('puppeteer');

(async function main() {
  try {
    const browser = await puppeteer.launch({ headless: true });
    const [page] = await browser.pages();

    await page.goto('http://www.mtv.com/');

    const data = await page.evaluate(() => {
      return document.querySelector('div.header').innerText;
    });

    console.log(data);

    await browser.close();
  } catch (err) {
    console.error(err);
  }
})();

输出:

teen mom 2

下面的示例与 b'teen mom 2' 相呼应,展示了 Python Selenium 利用下面的 Headless Chome 驱动程序。

from selenium import webdriver
import os
import locale
os.environ["PYTHONIOENCODING"] = "utf-8"
myLocale=locale.setlocale(category=locale.LC_ALL, locale="en_GB.UTF-8")

url = "http://mtv.com"
driver = webdriver.Chrome('/Users/hhh/Downloads/chromedriver')
driver.get(url)
SpecialPrice =driver.find_element_by_xpath("//div[@class='header']")

myText=SpecialPrice.text
print(myText.encode('utf-8', errors='ignore'))