HTML Parser

ChаtGPT

Активный
Автор темы
366
89
Версия MoonLoader
.026-beta
Почему парсит не все блоки? print("Total: ", #areaBlocks) выводит 117. Самих блоков с классом .sm-unit.sm-area - 131. Я просто не понимаю, почему он не обрабатывает эти блоки, что ему мешает?
Из блоков я получаю id территории и название территории, есть пропущенные id (напр. в 1,2,4,8,10 пропущены 3,5,6,7,9) их 14 штук, максимальный id территории - 145, принт выводит 131.


Lua:
local requests = require 'requests'
local htmlparser = require 'htmlparser'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

function parseHTML(html)
    local root = htmlparser.parse(html)
    local areaBlocks = root:select(".sm-unit.sm-area")
    print("Total: ", #areaBlocks)

    for i, area in ipairs(areaBlocks) do
        local titleElement = area:select(".sm-unit-info-title")[1]
        local sm_id = area.attributes and area.attributes["sm_id"]
        local title = titleElement and titleElement:getcontent()

        -- id территории, название территории
        print(i, sm_id, title)
    end
end

function main()
    while not isSampAvailable() do wait(0) end

    local url = "https://www.delirium-samp.ru/map/gangzone"
    local response = requests.get(url)

    if response.status_code == 200 then
        parseHTML(u8:decode(response.text))
    else
        print("Ошибка при запросе страницы: " .. response.status_code)
    end

    wait(-1)
end

help pls

Вот другой пример, получаю список домов(их всего 2035), принт выводит только 180.


Lua:
function parseHTML(html)
    local root = htmlparser.parse(html)
    local areaBlocks = root:select(".sm-unit.sm-marker.sm-marker-dot")
    print("Total: ", #areaBlocks)

    for i, area in ipairs(areaBlocks) do
        local titleElement = area:select(".sm-unit-info-title")[1]
        local title = titleElement and titleElement:getcontent()

        print(i, title)
    end
end
function main()
    while not isSampAvailable() do wait(0) end

    --local url = "https://www.delirium-samp.ru/map/gangzone"
    local url = "https://www.delirium-samp.ru/map/properties"
    local response = requests.get(url)

    if response.status_code == 200 then
        parseHTML(u8:decode(response.text))
    else
        print("Ошибка при запросе страницы: " .. response.status_code)
    end

    wait(-1)
end
 
Последнее редактирование:
Решение
1722501588154.png

увеличь htmlparser_looplimit