То, что вы делаете, называется Web Scraping - на Inte rnet есть много информации и инструментов, как это сделать. Позвольте мне поделиться своим путем:
1. Первое, что вам нужно сделать, как указал Ху go, это прочитать DOM с веб-сайта.
Для этого вам определенно нужен безголовый браузер. Хорошо, что многие браузеры поддерживают также режим без головы. Например, если у вас установлен Google Chrome
, вы можете запустить его из командной строки и в режиме без заголовка, чтобы получить весь (динамический c) контент отображаемой страницы. например, на Ма c:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --dump-dom --disable-gpu "https://www.google.com"
2. Как только вы получите обработанный html контент, вам необходимо надежно его обработать.
Синтаксический анализ HTML (как и любой вложенный формат данных) с помощью линейно-ориентированных инструментов, таких как sed
/ awk
/ et c подвержен ошибкам, поэтому вам нужно найти утилиту, способную анализировать (извлекать) данные из HTML, которая * html -ware.
Я использую jtm
(разработано мной). Это без потерь конвертер из HTML/XML
в JSON
(и обратно). Причина преобразования HTML в JSON проста - JSON - (наиболее) широко используемая модель данных, и в наши дни доступно множество JSON синтаксических анализаторов.
После преобразования в JSON вы можете использовать любые инструменты для извлечения необходимой информации из JSON - опять же, есть много автономных инструментов, но я использую мои - jtc
- это очень быстро ( но это имеет значение только для действительно огромных JSON), и с jtc
действительно легко извлечь любую JSON информацию.
Например, следующее извлекает передний список вопросов из stackoverflow:
bash $ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --dump-dom --disable-gpu "https://stackoverflow.com/questions" 2>/dev/null | jtm | jtc -w'[class]:<question-hyperlink>:[-3]><P:'
"Component LoginContainerComponent is not part of any NgModule or the module has not been imported into your module"
"Removing an object with attributes from a list?"
"Is there a Predicate for operator instanceof?"
"How to use multiple document processor in vespa.ai in separate search chain?"
"How do I load an external JS library in Svelte/Sapper?"
"Why do gcc and clang place custom-sectioned const-funcptr symbols into writable sections when compiling with -fpic?"
"How does one solve “ 'CMySQLCursor' object has no attribute 'keys'”?"
"css video iframe good practice wordpress"
"auto complete address and navigate to that place"
"How do I trace an exact or find a specific value in a matplotlib graph?"
"Swift 5 How to get JSON multilayer data to append?"
"Excel wrong data format"
"Converting React function component to class component in React-JS"
"Can't Move PTZ Camera using ONVIF Protocol -Python Client"
"Can a TypeScript HttpClient accept a string that is not explicitly formatted as JSON?"
bash $
После извлечения необходимой информации вы можете встроить эту командную строку в свой сценарий bash.