Web scraping 无头Chrome:网站将内容划分为文本、字符串或ASCII
我想从动态加载的网站上抓取文本,我需要动态抓取。由于动态加载,诸如Web scraping 无头Chrome:网站将内容划分为文本、字符串或ASCII,web-scraping,ascii,chromium,headless,google-chrome-headless,Web Scraping,Ascii,Chromium,Headless,Google Chrome Headless,我想从动态加载的网站上抓取文本,我需要动态抓取。由于动态加载,诸如$lynx--dump google.com之类的选项似乎不起作用。为此,我使用了无头铬合金 $ Chrome --headless --disable-gpu --no-sandbox --run-all-compositor-stages-before-draw --virtual-time-budget=1000 --window-size=1200,3000 --screenshot http://mtv.com 但我找
$lynx--dump google.com
之类的选项似乎不起作用。为此,我使用了无头铬合金
$ 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的文本,例如一些类
如何从动态加载的网站中切换文本?
使用无头铬合金动态加载的示例结果
最好的方法是直接从网站中提取文本
如果找不到其他方法,请使用OCR(光学字符识别)提取文本,以及问题中提供的无头镀铬解决方案
屏幕截图中的坏选项OCR
$ brew install imagemagick
$ brew install tesseract
$ convert input.png -resize 400% -type Grayscale input.tif
$ tesseract -l eng input.tif output
在这里,您可以使用正则表达式查找单个文本片段。否则,OCR输出是准确的,但没有组织,这使得以后很难使用,因为原型识别不准确。如果您可以为Node.JS编写JS,您可以尝试使用Node.JS库来管理headless Chrome:
“严格使用”;
const puppeter=require('puppeter');
(异步函数main(){
试一试{
const browser=wait puppeter.launch({headless:true});
const[page]=wait browser.pages();
等待页面。转到('http://www.mtv.com/');
常量数据=等待页面。评估(()=>{
return document.querySelector('div.header').innerText;
});
控制台日志(数据);
等待浏览器关闭();
}捕捉(错误){
控制台错误(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'))