All streams
Search
Write a publication
Pull to refresh

Comments 32

Но для решения задач по парсингу одной-двух ссылок, а не многопоточного скачивания всего сайта это не подходило.

А зачем скачивать весь сайт если можно скачать только контент этих одной-двух ссылок?

В вашем случае самым "правильным" решением будет как раз селениум с безголовым браузером. По крайней мере домофонду защититься от него будет куда сложнее чем от вашего итогового решения.

Так что вы написали ещё ПО. Л - логика.

Скрипт уже был и прекрасно работает.

Потребовалось лишь минимально модернизировать.

Но вы же не хотели лишнего ПО, но вместо этого написали ещё ПО!

Скрипт не лишнее ПО, а работающий под задачу функционал.

А всё остальное ПО, которое решало поставленную задачу классом лучше, лишнее?

Поздравляю, у вас NIH-синдром. Гуглябельно.

Микроскопом тоже можно гвозди заколачивать)))

Да. Но вместо этого это изобретаете микроскоп из трубочки для туалетной бумаги и двух полиэтиленовых пакетиков с водой.

А потом всё равно им забиваете гвозди.

я-то как раз с молотком просто, юморист))

Нет, вы не с инструментом пришли, а со средством разработки, и написали ещё одно ПО. Лишнее.

UFO landed and left these words here

Не хотелось лишнего ПО.

В роботс.тхт действительно стоит много запретов для ботов, но не на новостные статьи.

По имени и по айпи хоста - отдается одинаковый контент.

UFO landed and left these words here

Например, какие проблемы? С другими сайтами проблем по сбору нет.

Хотел дополнить в статье, но напишу в комменте, что с авито - примерно та же ситуация возникла. Решено этим же подходом - успешно.

UFO landed and left these words here

Можете скрин ответа привести - что именно отдает, какой контент?

UFO landed and left these words here

какая-то защита там есть по-любому - видимо, от парсинга предложений о жилье. проверю тогда сам в постмане, спасибо.

постман гетом по ссылке отдает контент - вообще без каких-либо заголовков.

Дичь лютейшую прочитал сейчас я.
Коллега, для ваших целей замечательно зайдёт вот такая штука:
https://splash.readthedocs.io/en/stable/
Он очень просто ставится. У него даже docker image готовый есть.
А дальше вы делаете к нему http запрос хоть тем же курлом с указанием урла сайта, который нужно спарсить - и он возвращает вам html.
Более того, можно писать свои скрипты парсинга на Lua, если нужно парсить по какому-то сценарию. Например, если сайты с AJAX подгрузкой контента, постраничником и т.п.
Из минусов:
- разработчики на него немного подзабили, походу
- падает на сложных Angular приложениях

Только ради этого комментария стоило зайти на эту статью.

Спасибо!

В решении дополнил скрипт методом gethostbyname, чтобы получать IPv4-адрес, соответствующий переданному имени хоста.

Плохая идея, т.к., начиная с HTTP/1.1, на одном IP может висеть несколько сайтов. Соответственно, скачиваться будет что-нибудь не то.

В этом случае (домофонд, авито) было как раз наоборот (изначально использовал gethostbynamel - для списка айпи). Думаю, что для крупных сайтов так и будет.

Но спасибо за коммент.

?‍♂️ как одним комментом показать непонимание работы http (а также того, что помогает ему: балансировщиков, проксей, cdn и пр)

Стояла задача работоспособности скрипта для 1 сайта с защитой - она решена.

О чем вкратце рассказано в статье.

Я тут намедни столкнулся с дригой забавной ситуацией.

cURL из под PHP на двух "одинаковых" версиях PHP на разных машинах при запросе одного и того же урла выдавал на одной машине заголовки как есть, а на другой в нижнем регистре. Так и не понял почему, тупо добавил в regexp case independed.

UFO landed and left these words here

а зачем вебсерверу отдавать заголовки то в нормальном виде, то в нижнем регистре?
Тем более страница одна и таже, и по факту оно проявлялось именно на разных машинах, которые делают запрос. Я подозреваю, что "проблема" в версии cURL extension/OpenSSL. Ибо хоть версия php7.4 и там и там одна, но одна тачка Debian 10, другая Debian 11

О чём статья вообще? За 5 минут накидал скрипт, никакой защиты на веб-сервере нет.

$wc = New-Object system.Net.WebClient;
($wc.downloadString("https://www.domofond.ru/statya/kolichestvo_dolgostroev_uvelichilos_v_vosemnadtsati_regionah_rf_za_2021_god/102082") -split '\r?\n')[60].Replace('</script>','').Replace('                <script>window.__INITIAL_DATA__ = ', '') | ConvertFrom-Json

На выходе готовый JSON, дёргайте оттуда любые данные. В чём проблема-то? )

Sign up to leave a comment.

Articles