1 (изменено: becauseim, 2017-02-14 02:04:36)

Тема: AHK: Получение данных с сайта sports.ru

Помогите, пожалуйста, получить информацию из sports.ru о следующем несыгранном матче, а также информацию о последнем сыгранном матче, исключая результат исхода матча. Спасибо!

2

Re: AHK: Получение данных с сайта sports.ru

Сообщение вынесено из темы в отдельный топик.

3

Re: AHK: Получение данных с сайта sports.ru

becauseim, пользуйтесь поиском.
На форуме уже много раз обсуждалось, как получить данные с сайтов.

4 (изменено: ypppu, 2017-02-19 00:44:47)

Re: AHK: Получение данных с сайта sports.ru

Всё просто.

QueryResponseWebsite(url) ; На вход получает URL. Открывает ссылку URL и в переменную "AnswerWebsite" сохраняет ответ с сайта.
{
	global AnswerWebsite
	ComObjError(False) 
	HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1") 
	HTTP.SetTimeouts(6000,6000,6000,6000)
	HTTP.Open("GET",url) 
	HTTP.Send() 
	AnswerWebsite := HTTP.ResponseText
}

5

Re: AHK: Получение данных с сайта sports.ru

sememix, спасибо! Но не понятно, как правильно использовать эту ф-ию.

6

Re: AHK: Получение данных с сайта sports.ru

becauseim

QueryResponseWebsite(ссылка)
MsgBox % AnswerWebsite

7 (изменено: becauseim, 2017-02-16 18:41:48)

Re: AHK: Получение данных с сайта sports.ru

sememix, функция выдает название вкладки? Как же получить информацию о результате? Т.е. как получить ссылку на строку с результатом?

Я бы хотел попросить конкретный пример, отвечающий, например, на первую половину вопроса, аналогично которому, я бы мог самостоятельно решить вторую его часть.

8 (изменено: becauseim, 2017-02-18 17:53:24)

Re: AHK: Получение данных с сайта sports.ru

Сопутствующий вопрос: возможно ли реализовать данный сценарий без видимой активности стандартного браузера? Или же AHK не может получать информацию с сайта в фоновом режиме?

upd.: Нашел пример, который демонстрирует работу в фоновом режиме. Однако по-прежнему, сложным остается определение класса на целевой странице для перебора и извлечения нужной мне информации.

9

Re: AHK: Получение данных с сайта sports.ru

Если сложно определить класс, делайте через регулярные выражения.

10

Re: AHK: Получение данных с сайта sports.ru

Malcev, а вообще, пример из восьмого поста подходит для интересующего меня сайта?

11 (изменено: Malcev, 2017-02-19 01:06:11)

Re: AHK: Получение данных с сайта sports.ru

Там мудрёно и кое-что лишнее.
Вот тут проще:
http://forum.script-coding.com/viewtopic.php?pid=111713

12

Re: AHK: Получение данных с сайта sports.ru

Malcev, Спасибо! Правда не из одного примера не понятно, куда помещается класс. Да и сам класс по-прежнему я не установил.

13

Re: AHK: Получение данных с сайта sports.ru

Malcev, дайте, пожалуйста, ссылку на пост из предложенного топика, пример из которого наиболее подходит.

14

Re: AHK: Получение данных с сайта sports.ru

http://forum.script-coding.com/viewtopi … 01#p111601
http://forum.script-coding.com/viewtopi … 38#p111638

15

Re: AHK: Получение данных с сайта sports.ru

Malcev, какие строки из примера по второй ссылке подлежат редактированию? Не понятно, где необходимо указывать класс.

16

Re: AHK: Получение данных с сайта sports.ru

Xameleon пишет:

Алгоритм прост. Открыл в браузере ( в моём случае хром ) страницу сайта. Нажал F12, чтобы вызвать панель разработчика. Кликнул по значку лупы, а потом на интересующий меня блок на странице. В окне с деревом html тэгов раскрылся тот который я искал. Из кода я выяснил, что у ячейки установлен только classname, значит придётся искать по нему, что я и сделал в скрипте. Механику парсинга и отбора тэгов я позаимствовал у HTML DOM Document. Вот вроде бы и всё.

https://msdn.microsoft.com/en-us/library/ms535862
https://www.w3schools.com/jsref/dom_obj_document.asp

17

Re: AHK: Получение данных с сайта sports.ru

Всем доброго здоровья!
А как быть, если нужная разметка страницы загружается в ответ на клик по элементу формы? Например, на страницу загружаются скрипты со стилями и форма кнопки "Продолжить" и только после нажатия этой кнопки вместо формы её описывающей загружается остальная разметка страницы(с ботами борются). Как правило, выглядит такая форма везде шаблонно:


; ---- разметка до кнопки

<Form method="POST" action=''>
	<input type="hidden" name="op" value="view">
	<input type="hidden" name="id" value="cpfc7kzch2b1">
	<input type="hidden" name="pre" value="1">
	<input type="submit" name="next" value="Продолжить">
</Form>

; ---- разметка после кнопки

В "Tampermonkey" у меня простенький сценарий, который просто сообщает клик элементу с атрибутом "name" равному "next". Но тут нельзя отправить клик вроде:


oHtmlDoc.getElementsByName("next")[0].click()

Здесь, нужно отправить запрос и получить ответ, верно? Потому как такое дело открывает пустую страницу в "IE", а текст в "oHtmlDoc" остаётся без изменений.
Подскажите пожалуйста методу. Весь вечер увлечён этой темой, но решение не приходит. По ссылкам примеров, уводящим по пути рассуждения ознакомился с заполнением формы и авторизацией, да как-то методом тыка, без должного опыта не приманстырить знания, чтобы этот велосипед из костылей мог хотя бы не разваливаться.

18

Re: AHK: Получение данных с сайта sports.ru

Посмотрите,, что броузер отправляет при нажатии этой кнопки и тоже самое отправляйте в своем пост запросе через WinhttpRequest.

19

Re: AHK: Получение данных с сайта sports.ru

Отлично, работает!
Правда теперь, если я правильно понимаю, встал камнем заморочь с куками. Строки имеющие место быть в ответе на запрос из браузера:


<script language="JavaScript" type="text/javascript" CHARSET="UTF-8" src="/js/jquery.cookie.js"></script>
<script>
	$.cookie('file_id', '13349000', { expires: 10 });
	$.cookie('file_code', 'rb6p1oxubsl9', { expires: 10 });
</script>

и остальная, следующая за ними разметка основного контента, отсутствует в тексте ответа, получаемого от запроса из сценария. Прямо в аккурат так, будто середина вырезана, а в остальном текст идентичен.

С этим можно что-то сделать?

20

Re: AHK: Получение данных с сайта sports.ru

Куки тоже можно отправлять.

SetRequestHeader("Cookie", ....)

http://forum.script-coding.com/viewtopi … 87#p107787
Но так сходу сложно сказать в чем причина.
Может какой-то параметр упустили в пост запросе, ай-ди или токен.

21 (изменено: KusochekDobra, 2017-02-22 13:05:52)

Re: AHK: Получение данных с сайта sports.ru

Благодарю! Вечером попробую разобраться.

becauseim, не думаю, что имеет смысл дублировать в приват просьбу из топика, как не считаю, что Вас игнорируют. Вероятнее всего, заданный вопрос малоинформативен, или слишком неконкретен, чтобы искать к нему определения более, чем их освещают примеры из этого обсуждения. Попробуйте получить текст страницы, чтобы понимать, что с этим делать дальше:


Gui, +HWNDHandle
Gui, Add, Edit, w1200 h800
Gui, Show, Hide

link := "https://www.sports.ru/barcelona/calendar/"
req := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
req.Open("GET", link, false)
req.Send()
text := req.responseText
ControlSetText,Edit1,%text%,ahk_id%Handle%
Gui, Show

Текст в "Edit" будет содержать все знаки из разметки страницы, но может некорректно их отображать. Скопируйте его и вставьте в Ваш редактор. Так будет проще изучать то, что пришло ответом на запрос. Так же, пользуйтесь вкладкой "Network" по клавише "F12" в браузере "Chrome", или "Сеть", в расширении "FireBug" для "FireFox". Там отображается детальная информация о запросах со страницы. Ну и почитать соответствующую литературу конечно же стоит. Да и мне пожалуй тоже, потому как я такой же "деревянный" в этом вопросе и как всегда, больше надежд возлагаю на метод "научного тыка" вместо того, чтобы уделить этому должное внимание, раз уж мне так интересно.

22 (изменено: becauseim, 2017-02-22 17:33:54)

Re: AHK: Получение данных с сайта sports.ru

KusochekDobra, Спасибо! К сожалению, в Edit после запуска скрипта не содержится ничего, поэтому, не понимаю, как это использовать и понимать. Думаю, вопрос достаточно информативен, а конкретного решения не поступает в связи с надежой на то, что зацеплюсь за примеры. И вроде бы, Malcev предложил методику работы над элементами веб-страницы, но пока я всеже не понимаю, с чего надо начинать. Подумаю.

23 (изменено: KusochekDobra, 2017-02-22 18:31:08)

Re: AHK: Получение данных с сайта sports.ru

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


#SingleInstance Force
#NoEnv
DetectHiddenWindows, On

Gui, +HWNDHandle
Gui, Add, Edit, w1200 h800
Gui, Show, Hide

link := "https://www.sports.ru/barcelona/calendar/"
req := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
req.Open("GET", link, false)
req.Send()
text := req.responseText
ControlSetText,Edit1,%text%,ahk_id%Handle%
Gui, Show
return

GuiClose:
	ExitApp

Так будет работать.

24

Re: AHK: Получение данных с сайта sports.ru

becauseim пишет:

но пока я всеже не понимаю, с чего надо начинать.

Начните с прочтения:
http://ermak.cs.nstu.ru/webprog/webprog.pdf

25 (изменено: svoboden, 2017-02-23 07:25:59)

Re: AHK: Получение данных с сайта sports.ru

Тут надо регулярными выражениями вытягивать нужную информацию. Сам я не знаю их, можно по нужным буквам достать информацию, но вместе с текстом, идет код HTML.

link := "https://www.sports.ru/"
req := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
req.Open("GET", link, false)
req.Send()
text := req.responseText

MsgBox % StringBetween(text,"С","ей")

StringBetween( String, NeedleStart, NeedleEnd="" ) {

    StringGetPos, pos, String, % NeedleStart
    If ( ErrorLevel )
         Return ""
    StringTrimLeft, String, String, pos + StrLen( NeedleStart )
    If ( NeedleEnd = "" )
    Return String
    StringGetPos, pos, String, % NeedleEnd
    If ( ErrorLevel )
        Return ""
    StringLeft, String, String, pos
    Return String
}
return

Тут примеры есть.

26

Re: AHK: Получение данных с сайта sports.ru

svoboden, спасибо! Так понимаю, в Вашем примере не указан конкретный класс или тег страницы, для получения по нему информации? В какую строку необходимо его вводить? Прокомментируйте, пожалуйста, пятую строку.

27 (изменено: svoboden, 2017-02-25 00:31:36)

Re: AHK: Получение данных с сайта sports.ru

becauseim, надо регулярными выражениями по тегам вытягивать информацию. А здесь, ни по тегам, а по нужным символам находит информацию.

28

Re: AHK: Получение данных с сайта sports.ru

Совсем необязательно использовать регулярные выражения, хотя с ними быстрее.
Можно через HTMLFile.