Страницы: 1
RSS
Копирование теста с сайта
 
Помогите,пожалуйста, кодом реализовать алгоритм:
1) Открываем Internet Exploer
2)  Переходим на сайт http://www.livescore.in/ru/
3) Копируем весь текст со страницы на "Лист1"
4) Закрываем Internet Exploer

Чтобы в итоге получилось  примерно так:

 
А у вас есть наработки по теме?
Для знающих макрос несложный. Но нужно копаться. Скорее всего здесь попросят вознаграждение.
С уважением,
Федор/Все_просто
 
Код
Set oIE = CreateObject("InternetExplorer.Application")
oIE.Visible = 0 
s = "http://www.livescore.in/ru/"
oIE.Navigate (s) 
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 
Set maPageHtml = oIE.Document

Только примерно представляю.  Вот только не знаю как данные из переменной   maPageHtml  скопировать на лист.
Изменено: Ball_bes - 01.03.2015 23:28:37
 
вкладка данные-из интернета - создаете обновляемый веб-запрос в пару кликов мыши.
 
Это то я знаю, да тут с сайтом что-то не то, не получается через встроенный веб запрос.
 
а дальше обработка текста maPageHtml.InnerHtml (вроде так это пишется)
Учимся сами и помогаем другим...
 
Dima S,а вы пробовали так, через обновляемый запрос?
Сайт заскриптен, просто так не получится. Надо вначале вытащить документ через CreateObject, а потом парсить. Для парсинга я знаю два способа: через DOM и через строковые функции (left, right, mid, trim, split и прочие).
С уважением,
Федор/Все_просто
 
Цитата
ber$erk написал:обработка текста maPageHtml.InnerHtml (вроде так это пишется)
А это как?
Мне не надо вытаскивать со страницы отдельные данные, нужно скопировать страницу целиком на лист, чтобы при смене интернет адреса макрос работал.
 
Не знаю,может не совсем понятно обьясняю. Но мне нужно макросом сделать то, что я делаю вручную:

1) Открываю  Internet Exploer
2) Перехожу на сайт  http://www.livescore.in/ru/
3) Щёлкаю правой кнопкой мышки на странице, нажимаю "Выделить всё"  ---> "Копировать"
4) Затем в Excel выделяю ячейку "А1" и нажимаю "Вставить".

Весь текст сам "расползается" по странице. Нужно чтобы и после работы макроса результат был таким же. Вроде там пару строчек кода ?
Изменено: Ball_bes - 02.03.2015 11:10:18
 
Цитата
Ball_bes написал: Вроде там пару строчек кода
Откуда такое понимание, если не знаете наверняка? Почему думаете, раз это руками делается в три движения, кодом будет еще проще? Бывают ситуации совершенно обратные - простые действия мыши на VBA реализовываются сотней строк...
По идее надо что-то вроде:
Код
Sub Test()
    Dim oIE As Object, s, sPageTExt As String
    Dim asSp
    Set oIE = CreateObject("InternetExplorer.Application")
    oIE.Visible = 0
    s = "http://www.livescore.in/ru/"
    oIE.Navigate (s)
    Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop
    sPageTExt = oIE.Document.body.innerText
    asSp = Split(sPageTExt, vbNewLine)
    Cells(1, 1).Resize(UBound(asSp), 1).Value = Application.Transpose(asSp)
    oIE.Quit
    Set oIE = Nothing
End Sub
Но при этом есть необходимость разбить нормально на столбцы. И убрать пустые и лишние строки. Через HTML не очень-то получается, т.к. результаты выводятся на страницу скриптами.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, вот интересно, заскриптованные страницы можно как-то с помощью XHR вытащить?
Уже в который раз вижу такие сайты и каждый раз приходится делать через IE.
По поводу кода:
Цитата
The_Prist написал: Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop
если потом использовать DOM, надо будет еще поставить паузу, пока сработают скрипты. У меня пауза работает вот так:
Код
dim sec as long: sec = 2 'секунды, чтобы подождать
Application.Wait Now + 1 / 24 / 60 / 60 * sec
С уважением,
Федор/Все_просто
 
Еще пару строк кода.
Этот сайт,как и все его аналоги,старается защитить инфу.
Текст для дальнейшей обработки скриптов можно получить так.
Если поиграться,можно его дешифровать,ничего сложного нет.
Код
Function HTTPRequest() As String
    Dim XMLHTTP
    On Error Resume Next
    Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
    XMLHTTP.Open "GET", "http://d.livescore.in/ru/x/feed/f_1_0_2_ru_4", "False"
    XMLHTTP.setRequestHeader "X-Fsign", "SW9D1eZo"
    XMLHTTP.setRequestHeader "X-Requested-With", "XMLHttpRequest"
    XMLHTTP.setRequestHeader "Referer", "http://d.livescore.in/ru/x/feed/proxy"
    XMLHTTP.setRequestHeader "Accept", "*/*"
    XMLHTTP.setRequestHeader "user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"
    XMLHTTP.setRequestHeader "Accept-Language", "*"
    XMLHTTP.send
    If XMLHTTP.Status = 200 Then
        HTTPRequest = XMLHTTP.responseText
    End If
    Set XMLHTTP = Nothing
End Function
 
Т.е насколько я понял  ничего не получится, нужно каждый отдельный сайт преобразовывать по исходному коду?
 
C   myscore можно получить html текст в два захода по конкретному запросу.собрать нужные данные.
Если много информации брать,то через браузер вход забанят от суток до 5.
 
Doober, а что мешает использовать прокси, учитывая, что раз можно через XHR, то можно и прокси:
Код
Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
XMLHTtP.setProxy 2, "192.168.100.1:3128"
С уважением,
Федор/Все_просто
 
Можно и без прокси обойтись.
Особо не вникал,скопировал заголовки с fiddlerа
 
Цитата
The_Prist написал:  простые действия мыши на VBA реализовываются сотней строк...
а если через SendKeys в окошко Explorer?
F1 творит чудеса
 
Не люблю я этот SendKeys. Дюже не стабильная команда...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Еще пару строк кода.
Этот сайт,как и все его аналоги,старается защитить инфу.
Текст для дальнейшей обработки скриптов можно получить так.
Если поиграться,можно его дешифровать,ничего сложного нет.
Код
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function HTTPRequest() As String
   Dim XMLHTTP
   On Error Resume Next
   Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
   XMLHTTP.Open "GET", "http://d.livescore.in/ru/x/feed/f_1_0_2_ru_4", "False"
   XMLHTTP.setRequestHeader "X-Fsign", "SW9D1eZo"
   XMLHTTP.setRequestHeader "X-Requested-With", "XMLHttpRequest"
   XMLHTTP.setRequestHeader "Referer", "http://d.livescore.in/ru/x/feed/proxy"
   XMLHTTP.setRequestHeader "Accept", "*/*"
   XMLHTTP.setRequestHeader "user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"
   XMLHTTP.setRequestHeader "Accept-Language", "*"
   XMLHTTP.send
   If XMLHTTP.Status = 200 Then
       HTTPRequest = XMLHTTP.responseText
   End If
   Set XMLHTTP = Nothing
End Function
А как это же реализовать с хоккейными матчами, касательно myscore? Как узнать нужные директории в адресной строке? Я пытался прописывать http://d.myscore.ru/hockey/x/feed/f_1_0_2_ru_4 , но ничего не выдаёт вообще. Может    XMLHTTP.setRequestHeader "X-Fsign", "SW9D1eZo" другой. Есть предположение, что это ключ. Но нет уверенности, далёк я от мастерства. Дайте пинок, куда копать? :)
 
Пинок.
Владимир
Страницы: 1
Наверх