Вход

Просмотр полной версии : Запрос страницы сайта с php


wadim
28.10.2018, 22:16
Всем привет! На https://www.bloomberg.com/profiles/companies/0003530D:US-united-grinding-north-america-inc

нужно отправить запрос и получить ВСЮ страницу, аналог этого:
file_get_contents('https://www.bloomberg.com/profiles/companies/0003530D:US-united-grinding-north-america-inc');

У кого получиться заплачу, не обижу. Нужно на php.

SuperZen
29.10.2018, 09:34
Проблему не описал, http://phantomjs.org/
Ну даже если он и все ), то он еще может...
https://medium.com/devschacht/phantomjs-is-over-df065e5b23bf

laimas
29.10.2018, 10:03
SuperZen,
причем тут картинки, нужен код страницы для последующего граббера, а данный сайт имеет хорошую защиту, надо полагать с привлечением JS.

Nexus
29.10.2018, 10:16
надо полагать с привлечением JS
Что-то я не вижу для чего тут может понадобится js...
Со страницы же просто нужно получить информацию о компании (Название, описание, адрес, etc.)?
Думаю обычного curl, который будет косить под браузер должно хватить.

laimas
29.10.2018, 10:33
Думаю обычного curl, который будет косить под браузер должно хватить.

Ну и в чем проблема, сложно попробовать? ;)

В чем суть JS? А в том, что с CURL с сохранением кук легко обмануть атакуемого, а вот ответ от клиента с выполнением js сценария, это посложнее будет, хотя уже есть решения с выполнением такого на сервере.

Nexus
29.10.2018, 11:22
Ну и в чем проблема, сложно попробовать?
Лень) После работы, может быть, попробую. На домашнем пк есть класс, имитирующий браузер.

ответ от клиента с выполнением js
Сервер на запрос отдает все данные в виде html, даже если js есть, то нафига он нам нужен, если данные уже получены?

SuperZen
29.10.2018, 12:11
SuperZen,
причем тут картинки, нужен код страницы для последующего граббера, а данный сайт имеет хорошую защиту, надо полагать с привлечением JS.

Потому что phantomjs это headless-browser, открываешь ссылку, там исполняется html+js, по таймауту берешь DOM, и парсишь его, я предполагал вот это... Да, берешь CEF, тоже самое...

laimas
29.10.2018, 14:02
SuperZen,
я так думаю, что нужен граббер чужого, то есть не это.

laimas
29.10.2018, 14:03
Сервер на запрос отдает все данные в виде html

Сервер еще подумает, что отдать. Ищите на хабре, есть там о "борьбе" подобной, не помню точно с каким доменом, есть и на хакер.ру, было по крайней мере.

SuperZen
30.10.2018, 13:02
SuperZen,
я так думаю, что нужен граббер чужого, то есть не это.

Это оно и есть

laimas
30.10.2018, 13:57
Это оно и есть

И каким образом, если клиент запросил, сервер утянул и вставил себе, вернул клиенту? Заставлять клиента иметь этот инструмент, вставлять ссылку, выполнять, ...?

Если судить по вопросу, то нужно несколько не то, о чем вы речь ведете.

SuperZen
30.10.2018, 14:25
Вопросов нет, или так, или никак

для пэхапэ:
https://github.com/cztomczak/phpdesktop

если делать через file_get_contents('https://www.bloomberg.com/profiles/companies/0003530D:US-united-grinding-north-america-inc');

причина (см вложение):

Страница в браузере загружается при запросе, но при cURL и file_get_contents происходит определение, неизвестно по каким параметрам, что это фейковый запрос, значит его надо замаскировать под реальный, а реальный, только из браузера (будем считать)...

Чтобы манипулировать браузером из программы, как сам понимаешь, это не просто...

Для этого берем CEF (https://en.wikipedia.org/wiki/Chromium_Embedded_Framework), и управляем хромом из программы...

laimas
30.10.2018, 14:39
Есть время свободное? Если цена вопроса сопоставима с ценой работы - вперед. :)

SuperZen
30.10.2018, 15:21
https://electronjs.org/docs/tutorial/first-app#%D0%9F%D0%BE%D0%BF%D1%80%D0%BE%D0%B1%D1%83%D0% B9%D1%82%D0%B5-%D1%8D%D1%82%D0%BE%D1%82-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80

Потом в файле main.js

поправить ф-цию:


function createWindow () {
mainWindow = new BrowserWindow({width: 800, height: 600})
mainWindow.loadURL('https://www.bloomberg.com/profiles/companies/0003530D:US-united-grinding-north-america-inc')
mainWindow.webContents.openDevTools()
mainWindow.on('closed', function () {
mainWindow = null
})
}


Результат на скриншоте )