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'))
我想从需要动态抓取的动态加载网站抓取文本。由于动态加载,$ 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'))