Bazaprogram.ru

Новости из мира ПК
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Html vba excel

Работа с HTML: поиск тегов (RegExp) и преобразование HTML в текст

В данной статье приведён код 2 функций, которые позволят вам найти на веб-странице нужные HTML теги,
и преобразовать HTML в текст

Особенность этого кода, — использование регулярных выражений (Regexp) для поиска в HTML

Эти функции лежат в основе моей надстройки «Парсер сайтов»

Есть возможность удалять теги из HTML (параметр DeleteTags), а также использовать подстановочный символ * до или после значения атрибута.
Можно также выполнять поиск по маске для атрибутов:

Функцией преобразования HTML в текст (ConvertHTMLtoText) можно воспользоваться отдельно (без функции GetTags)

Весь приведённый ниже код, скопируйте в отдельный стандартный модуль

  • 14886 просмотров

Комментарии

Добрый день, если можете подскажите пожалуйста в чём проблема и как можно её решить.
Суть макроса в том, что он берёт ссылки из диапазона ячеек, прогоняет по вашим функциям и выводит другую ссылку со страницы, и так пока не пройдёт по всем ячейкам и не соберёт все ссылки. Так вот, проблема в том что он теряет некоторые ссылки и не вписывает их в текстовый файл. Буду благодарен за помощь

Sub test()
Range(«E2»).Select

Do Until IsEmpty(ActiveCell)
txt = GetHTTPResponse(ActiveCell)
res = GetTags(txt, «tr», «class», «hi_sys poi stat_reged», «onclick»)

ПутьКРабочемуСтолу = CreateObject(«WScript.Shell»).SpecialFolders(«Desktop»)
AddIntoTXTfile ПутьКРабочемуСтолу & «PageText.txt», res
ActiveCell.Offset(1, 0).Select
Loop
MsgBox «Готово»
End Sub

Ничего заново не загружаю. Указываю брать данные из нужного столбца и всё.

Здравствуйте
я недавно на сайте в статьях заголовки менял, — и случайно зацепил код этого макроса
потому и не работает

Замените строку кода

PS: парсер эту задачу выполнит быстро, никаких 2 часов тут не нужно, несколько минут максимум.
Это если не прогружать все страницы заново, а брать исходные данные (HTML код) с листа из первого столбца (как ваш макрос делает), и выводить 3 столбца на лист

Добрый день.
Пользуюсь вашим парсером, отличная программа.
Ей я спарсил 100000 страниц в итоге в колонке у меня получились вот такие данные.
Символы <> в комментарии заменил на html сущности для наглядности.
а бабах
ирония
Теперь мне нужно достать href, innerhtml, title — парсером без проблем но по времени 2,5 часа при условии что я отключил прокручивание и сделал вывод по 200. — это долго.

Решил попробовть вашу функцию, загнал всё в массив и в цикле попробовал в общем

arrProiz(g, 2) = GetTags(arrProiz(g, 1), «a», «class», «strong», «innerHTML 1») данный код работает
arrProiz(g, 3) = GetTags(arrProiz(g, 1), «a», «», «», «href») — этот не работает.
arrProiz(g, 4) = GetTags(arrProiz(g, 1), «a», «», «», «title») — этот тоже не работает.

Выводит ошибку syntax error и выделяет строку

Да, возможно, — если у этих тегов есть что-то общее (название тега, или атрибут какой)
Иначе не понятно, как выделить именно 2 тега ‘span’ и ‘a’ среди сотни других тегов (в том числе тех же ‘span’ и ‘a’)
Можно и все теги найти, если в качестве имени тега написать ‘Any Tag’

Добрый день.
Подскажите, пожалуйста, а возможно функцией GetTags одновременно (не по очереди ) получить данные двух тегов (например «a» и/или «span») или всех тегов в переменной.

Читать еще:  Самый быстрый видео конвертер 2020

Алексей, потестируйте это всё в программе-парсере, — там это проще всё делается, — может, и причину найдете, почему не работает
http://excelvba.ru/programmes/Parser
Там это действие называется «HTML: поиск тегов»

Добрый день
Спасибо за пояснения, но некоторые моменты остались непонятны.
Вот например, попробовал разобрать страницу поисковой выдачи яндекс.

Пишу str1 = GetTags(txt, «li», «class», «serp-item t-construct-adapter__legacy», «outerHTML » & n & «»)
получаю не совсем то, что ожидал (ожидал код от

с внутренним содержимым)

Пишу str2 = GetTags(txt, «li», «class», «serp-item t-construct-adapter__legacy», «innerHTML » & n & «»)
получаю пустую строку

Алексей, ARSEP — это константа, которая используется в качестве разделителя элементов массива в функции GetTags
(когда функция GetTags возвращает не одно значение, а несколько, — она возвращает текстовую строку вида Значение1 & ARSEP & Значение2 & ARSEP & Значение3)
Пока другой информации по функции нет.

Добрый день!
А не подскажете, что за ARSEP в строчке примера
arr = Split(GetTags(txt, «span», «class», «product», «outerHTML»), ARSEP)

И вообще интересно было бы подробнее узнать про использование GetTags. Еесть ли информация кроме данной страницы?

Елена, при помощи VBA можно сделать что угодно
«Клик по кнопке» можно сделать 2 способами:
1) используя браузер (IE), найти элемент, и вызвать для него функцию .Click
2) без браузера, — посмотреть в коде страницы, что за запрос отправляется на сервер при нажатии на кнопку, и выполнить этот запрос макросом.

Я не готов вам помогать с макросами по этой теме, — у меня есть готовая программа (парсер сайтов), которая всё это умеет.
Сидеть же писать отдельные макросы, только потому что «мощный софт» вам не нужен, мне лень.

А возможно ли по примощи vba сделать клик по спрайт кнопке? например: «icon sprite inline love sprite-button-love»

для примера структура страницы:
urlS=»https://www.smule.com/p/1061154754_1232830398″

мне пока ещё сложна для понимания «смесь» HTML и VBA, но очень хочется разобраться 🙂
спасибо, за помощь!

Игорь, спасибо, но такой мощный софт мне не нужен/
пришлось немного импровизировать и вроде получилось, сели текст скрипта сплитовать
[vba]

Sub SmuleSing() ‘ пример использования
Application.ScreenUpdating = False
On Error Resume Next
txt = GetHTTPResponse(«https://www.smule.com/listen/new/9»)
txt = Replace(txt, ThisWorkbook.Sheets(«element»).Cells(1, 4), «»)
For strElement = 1 To ThisWorkbook.Sheets(«element»).Cells(Rows.Count, 1).End(xlUp).Row
elementND = ThisWorkbook.Sheets(«element»).Cells(strElement, 1)
For cc = 1 To 26
If Split(Split(txt, elementND)(cc — 1), «»»»)(0) = «» Then
ThisWorkbook.Sheets(«#out»).Cells(ThisWorkbook.Sheets(«#out»).Cells(Rows.Count, strElement).End(xlUp).Row + 1, strElement) = «Null»
Else
ThisWorkbook.Sheets(«#out»).Cells(ThisWorkbook.Sheets(«#out»).Cells(Rows.Count, strElement).End(xlUp).Row + 1, strElement) = Split(Split(txt, elementND)(cc — 1), «»»»)(0)
End If
Next
Next strElement
ThisWorkbook.Sheets(«#out»).Range(«$A$1:$D$» & ThisWorkbook.Sheets(«#out»).Cells(Rows.Count, 1).End(xlUp).Row).RemoveDuplicates Columns:=Array(1, 2, 3, 4), Header:=xlYes

ThisWorkbook.Sheets(«#out»).Cells(1, strElement + 1) = «-> » & ThisWorkbook.Sheets(«#out»).Cells(Rows.Count, 1).End(xlUp).Row — 1

End Sub
[/vba]
элементы на листе «element»
[a1]= «performance_key»:»
[a2]= «ensemble_type»:»
[a3]= «city»:»
[a4]= «country»:»
список записей выводится на лист «#out»

Елена, да, это возможно
Как настраивать (какие действия нужны) — показал на скриншоте:

Analyst Cave

Export Excel to HTML – convert tables to HTML

I received an interesting question today – on how to easily publish an Excel file to a web page. Although there are a ton of ways to approach this problem (ranging from Excel Services in SharePoint to Excel Interop or ClosedXML) let us say we want to restrict to using only Excel and VBA. Printing Excel to HTML is a very useful feature if you want to publish your data/Workbook online.

Читать еще:  Арктангенс в excel

The concept itself is very simple as HTML files are text files and therefore the problem is only to structure the data correctly in VBA before saving it to a HTML file.

I wanted to explore today 2 options:

  • Generating a HTML file via VBA
  • Generating a HTML file via the Publish feature in Excel

Both options are fairly useful ones – with the first one offering more flexibility and the second one being much easier to use.

Generating HTML via VBA

So lets start with the simple example of generating an Excel file from scratch just with VBA.

We have the following Excel table (ranging from A1 to C3):
Excel table

The Code

Excel to HTML: The result

Lets see the result (actual HTML posted to this page):

Col1Col2Col3
123
456

Nothing extraordinary – just a very simple table without any formatting.
What the code does is traverse through the Excel Range replacing rows with the

tag and columns (or rather cells) with the

tag inserting the cell’s contents within. A very simple example.

Excel Publish to HTML feaure

The Publish to HTML feature is a neat capability that allows you to export your entire Workbook as a HTML web page through which you can easily navigate. You can easily Publish your Excel Workbook from VBA or directly from Excel.

To publish the Excel file go to Save As and select Publish to configure the publish options:
Publish to HTML Excel feature

Alternatively you can use the VBA code below to achieve the same:

Easy as that! The additional advantage is that the Publish to Excel feature will keep some of your formatting settings e.g. bold, italic fonts etc. Some, however, usually will be omitted e.g. borders.

Conclusions

Without resorting to external solutions there are least 2 easy options of generating html files from Excel. Personally I would prefer to have control over my HTML file and use VBA possibly adding my own css styles and formatting.

Parse HTML in Excel VBA – Learn by parsing hacker news home page

Why parse HTML in Excel VBA? There may be different cases where we need to parse HTML in Excel. Few cases are generating multiple HTML files based on excel data, editing multiple HTML files, scraping some data etc.

I’m using Hacker News homepage for this example where we parse all the posts from homepage. Of course, Hacker News has its own API which can be used to pull latest topics but this example is just to learn how to parse HTML.

Why Hacker News? Because everyone knows Hacker News!

Final output looks like image below.

Getting started

  1. Microsoft HTML object library is used in parsing HTML.

Open script editor in excel (alt + f11) and add a reference to Microsoft HTML object library (Tools > references > select)

Читать еще:  Работа с базой данных excel 2020

A few basics first and then dive into code!

Defining and setting HTML

HTML object can be defined using :

HTML can be set to this object using this syntax :

Useful methods and properties

There are many methods and properties of HTML object and elements. You can have a look at all the methods using autocomplete but most useful methods are properties are as follows:

Steps

First, we pull Hacker News homepage by making a basic HTTP GET request. Read more about HTTP requests here – Http requests in Excel VBA

Set HTTP response to our HTML object.

Get all the latest topics using getElementsByClass method

Loop through each topic, parse each topic’s title, link, upvotes and username using different methods.

Enter all parsed values to sheet 1

Complete Code

Have a look at the code first.

When I say topics, I mean posts.

Code Explanation

  1. First we define all the required objects like HTMLDocument , MSXML2.XMLHTTP

Topics object to store topics which will be used to loop. I’ve defined few other objects like titleElem and detailsElem to make code readable.

get homepage and set its HTML to our HTML object in line 7

Now we have to get all the topic elements. We have to identify those elements to get them. In this htmlpage, all topic elements have a class named athing so we can use getElementsByClassName method to get those elements.

How to identify elements? By viewing page source or inspecting element in chrome (right click on element > inspect)

In line 8, We get all the topics using getElementsByClassName method by specifying the class name athing . Next we loop through all the topics using a For loop

All the topics are in a table element and each topic is a tr element (row) and topic’s details are in the next tr element. Each row has sub-parts : td elements which have the content like topic name, domain name, upvotes, username etc.

    Topic title and domain are in the third td element so we get it using getElementsByTagName(«td»)(2) (Index starts at 0). Topic name and link is in another a element so we get it using getElementsByTagName(«a»)(0) and enter its values in sheet 1

Topic details like upvotes and username are in the next element to topic element so we get it using NextSibling method. Get upvotes and username which are in span and a elements and enter in sheet 1.

Integer i is used to store row number which starts at 2 and increments with every topic.

Wrapping up

HTML Elements can also be defined as HTMLBaseElement for auto completion.

There are many ways of identifying an element in HTML. Using ID, Class name, Tag name etc. XPath can also be using to identify element but VBA doesn’t have built-in support for XPath. Here’s a custom function to identify elements using XPath.

If you have any questions or feedback, comment below.

Ссылка на основную публикацию
Adblock
detector