Безголовый Chrome: веб-сайт разделяет контент на текст, ToString или ASCII - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу очистить текст с динамически загруженного веб-сайта, для которого мне нужен динамический анализ.Из-за динамической загрузки такие параметры, как $ 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, например, с некоторым классом.

Как я могу вырезать текст с динамически загружаемого веб-сайта?

Пример результата при динамической загрузке с использованием хрома без головки enter image description here

Ответы [ 3 ]

1 голос
/ 15 апреля 2019

Если вы можете написать JS для Node.js, вы можете попробовать puppeteer , библиотеку Node.js для управления безголовым 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
0 голосов
/ 16 апреля 2019

В приведенном ниже примере отражено 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'))
0 голосов
/ 15 апреля 2019

Лучшим способом будет прямое извлечение текста с веб-сайта.

Если другой метод не найден, используйте 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

enter image description here

где вы можете использовать Regex для поиска отдельных фрагментов текста. В противном случае вывод OCR является точным, но неорганизованным, что затрудняет его последующее использование, что приводит к неточностям распознавания.

...