Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/64: Рейтинг темы: голосов - 64, средняя оценка - 4.64
0 / 0 / 2
Регистрация: 09.09.2013
Сообщений: 32

Парсинг динамически изменяющихся Web страниц

10.10.2013, 12:12. Показов 12916. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Пишу проект, в котором требуется выгружать в БД со страницы сайта некоторый набор динамически изменяющихся полей (т.е. их зависимость от времени). Есть реализация с периодическим извлечением текущих значений через WebBrowser.Document, однако не устраивает скорость работы - IE даже и сам по себе довольно медленно отрабатывает изменения наполнения страницы.
Курил форум по CefSharp, но не смог оттуда почерпнуть того, что требуется.
Если кто-то решал подобную задачу, например с использованием Chromium или Gecko, поделитесь пожалуйста опытом.
Буду очень признателен за выложенный скелет проекта.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2013, 12:12
Ответы с готовыми решениями:

Парсинг web страниц, загруженных в WebBrowser
Добрый день всем. Собственно говоря у меня не вопрос, а просьба растолковать некоторые детали в приведенной теме. У меня есть написанная...

Парсинг web-страниц
Добрый день, форумчане. Задача заключается в следующем: 1) Грузим в компонент TWebBrowser страницу. 2) Сохраняем код страницы в...

Как динамически изменять высоту TableView при изменяющихся высотах CustomViewCell
Здравствуйте. Пишу на Mono но думаю, что с кодом на Obj-C разберусь. В общем есть UITableView заполняю его кастомными ячейками для каждой...

43
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
10.10.2013, 12:15
Selenium + phantomjs
1
0 / 0 / 2
Регистрация: 09.09.2013
Сообщений: 32
10.10.2013, 13:41  [ТС]
Цитата Сообщение от Петррр Посмотреть сообщение
Selenium + phantomjs
Бегло посмотрел о чем идет речь.
Не хотелось бы погружаться в изучение совершенно новых для меня технологий без всякой гарантии на результат.
А нельзя ли все-таки средствами C#?
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
10.10.2013, 13:54
а вам обязательно показывать сам браузер? можно же через webClient грузить страницу и делать с html что нужно. Если грамотно распараллелить всё это, то ничего тормозить не будет
1
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
10.10.2013, 14:15
Цитата Сообщение от PIkarus Посмотреть сообщение
Не хотелось бы погружаться в изучение совершенно новых для меня технологий без всякой гарантии на результат.
Новая технология - это громко сказано, там все легко.
0
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
10.10.2013, 14:19
Попробуй post запросами обновлять отправляя в нужное для тебя время сам запрос
1
0 / 0 / 2
Регистрация: 09.09.2013
Сообщений: 32
10.10.2013, 19:18  [ТС]
Цитата Сообщение от Петррр Посмотреть сообщение
Новая технология - это громко сказано, там все легко.
Ну, Вам может и легко - при наличии исходной подготовки, а мне точно тяжеловато будет.
И самое главное, совсем не обязательно, что что-то из этого выйдет

Цитата Сообщение от Монфрид Посмотреть сообщение
а вам обязательно показывать сам браузер? можно же через webClient грузить страницу и делать с html что нужно. Если грамотно распараллелить всё это, то ничего тормозить не будет
Да пожалуй, что и не обязательно, так - для визуального контроля использовал. Но ведь для этого можно и отдельное окно браузера открыть, причем любого, а не тормознутого IE.
Так что наверное попробую, спасибо за совет

Правда у меня там в планах еще программный ввод данных в поля и кликанье по кнопкам.
Насколько я понимаю, WebClient этого делать не умеет? Тогда придется окно WebBrowser'a для этой цели сохранить...

Добавлено через 4 часа 31 минуту
Нет, не подходит WebClient в данном случае. Проблема в том, что событие DownloadStringCompleted совсем не означает, что динамическое содержание страницы уже загружено. Получается то же самое, о чем я писал в своей первой теме И снова про код HTML страницы.

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

А потому возвращаюсь к исходному вопросу. Неужели никто не решал такую задачу? (и все-таки желательно средствами C#)
0
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
10.10.2013, 19:50
Я тебе уде сказал, post-запросами, get=запросом грузи страничку постами получай динамически загружаемое содержимое, нужет только компонент idHTTP незнаю только есть он в C# в Delphi есть такой, в С такой аналогичный должен быть.
0
0 / 0 / 2
Регистрация: 09.09.2013
Сообщений: 32
10.10.2013, 21:07  [ТС]
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
Я тебе уде сказал, post-запросами, get=запросом грузи страничку постами получай динамически загружаемое содержимое, нужет только компонент idHTTP незнаю только есть он в C# в Delphi есть такой, в С такой аналогичный должен быть.
Аналог вроде есть - метод UploadData того же WebClient http://msdn.microsoft.com/ru-r... bwh0a.aspx
но это не помогает, т.к. момент, когда содержимое уже загружено, неизвестен. Мне что, вызывать его 1000 раз пока не увижу, что уже все ok? При работе с WebBrowser.Document это можно себе позволить (просто проверяю текущее значение нужных мне нод), т.к. в этом случае нет дополнительного обращения к серверу сайта. А если я стану 1000 раз постить меня через 10 минут забанят.

Вы, видимо, просто не очень представляете себе о чем идет речь. Попробуйте вашим методом (хоша бы и на Delphi) загрузить все счета со страницы http://www.soccer24.com/englan... e/results/
0
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
10.10.2013, 21:30
Зачем тебе это знать, страницу даже можно и не загружать. а сразу отправить пост запрос на получение динамического сожержимого. да и если ты так загрузиш страницу, то содержимое это не загрузиться без отправки этого поста. И ненужно вызывать его 1000 раз. Чуть позже будет время, попробую.
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
10.10.2013, 22:58
Когда-то я парсил сайт zakupki.gov.ru.
Там контент появлялся только после клика на картинку в результате выполнения JS. И там ещё задержки были в этих JS, секунд по 10. Этот контент, насколько я тогда понял, появлялся только в результате выполнения скрипта в браузере, когда я программно делал Clic на картинке, или на тексте, завёрнутом в DIV определённого класса, то есть без браузера было никак не получить контент.

Тем не менее, программа успевала собирать данные быстрее, чем они появлялись.

Есть в этом деле ещё один прикол, который я встретил на других сайтах. Подобные сайты обычно отслеживают частые обращения с одного IP адреса, и через некоторое (очень небольшое время) банят IP, на все вопросы с которого начинают денег просить. Поэтому приходилось вводить рандомные таймауты на обращения к сайту, изображая поведение человека. На некоторых сайтах это помогало, но не на всех. Иногда приходилось менять IP, с которого велось сканирование.

Так что на самых интересных сайтах за скоростью гнаться особо не приходилось.

А если сайт был не защищён от ddos и данные на нём были в виде просто текста, мой заказчик выкачивал весь сайт какой-то линуксовой тулзой, и я просто парсил htmlки как текст, без браузера. Это работает довольно быстро.

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

1
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
10.10.2013, 23:23
Угу. Не вижу проблем с задержкой. Использование броузера будет простейшим вариантом. Я так парсил сайты типа www.188bet.com (Screenshots)
0
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
10.10.2013, 23:50
Браузер та же программа, что может читать с сайта, а вы своими программами почему то нет?
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
11.10.2013, 00:09
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
почему-то нет?
Угу. А обфусцированные скрипты кто будет эмулировать?
0
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
11.10.2013, 00:22
Все равно все данные отправляются и получаются через браузер, то же самое можно сделать и в программе
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
11.10.2013, 00:27
Для того, чтобы сформировать запрос надо исполнить обфусцированный скрипт. Я сомневаюсь, что было бы эффективным делать это в программе.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
11.10.2013, 00:32
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
то же самое можно сделать и в программе
Можно. Подключив код половины броузера :-)
0
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
11.10.2013, 00:45
Вот спарсил таблицу со странице по ссылке в ней имеются такие данные ихе еще только еще надо привести в читабельный вид и выделить нужные. Сдесь только 2 строки я показал.

KtcCSrQn
1381071600
3
3
Tottenham
TOT
Tottenham
0
0
0
team
WES
West Ham
2
2
3
0
3
team
bXeGR2ug
1381071600
3
3
West Brom
WES
West Brom
0
0
1
1
0
team
ARS
Arsenal
1
0
1
team
...
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
11.10.2013, 01:07
Удобнее парсить InnerHTML - там не ошибешься.
1
0 / 0 / 2
Регистрация: 09.09.2013
Сообщений: 32
11.10.2013, 07:32  [ТС]
Ого! Пока я спал, здесь целая дискуссия образовалась. Всем спасибо за участие, всем отвечаю:

Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
Вот спарсил таблицу со странице по ссылке
...
Так я и не сомневался, что с вашим подходом это возможно, вопрос в том, какой ценой. Вы код покажите - там наверняка или несколько обращений к сайту или Sleep ms на 1000


Цитата Сообщение от ksk Посмотреть сообщение
Подобные сайты обычно отслеживают частые обращения с одного IP адреса, и через некоторое (очень небольшое время) банят IP
Это одна из проблем, о которой приходится думать. Но если для периодического извлечения динамически изменяющихся полей используется компонент браузера, проблема вроде бы снимается (в случае WebBrowser просто парсим текущее значение wb.Document.InnerHtml или текущее множество нод - wb.Document.All). Я правильно понимаю?

Цитата Сообщение от ksk Посмотреть сообщение
я реализовал MDI приложение, каждый документ - браузер, который обходит дерево ссылок сайта, удовлетворяющих заданному фильтру, накладываемому на URL
У меня уже есть такой вариант. Вопрос в том, какой использовали браузер? Меня не вполне устраивает скорость работы WB, который аналог IE, потому и пытаюсь смотреть в сторону Chromium и Gecko

Цитата Сообщение от gazlan Посмотреть сообщение
Угу. Не вижу проблем с задержкой. Использование броузера будет простейшим вариантом. Я так парсил сайты типа www.188bet.com
Это примерно то, что мне нужно. Вопрос тот же, что и выше - компонент от какого браузера использовали? Была ли скорость извлечения данных достаточна для отработки Live событий?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.10.2013, 07:32
Помогаю со студенческими работами здесь

Создать шаблон для всех страниц с подстановкой изменяющихся элементов
допустим у меня есть <div> <br> Привет юзернейм <br> (тут заполняем свой код) </div>

Парсинг динамически созданной страницы
Всем привет Можно ли как нибудь средствами vb.net получить исходный код динамически созданной страницы и в дальнейшем парсить его?...

Парсинг динамически создаваемого контента
Как осуществить парсинг к примеру таких сайтов http://plusminus.by/ , кде содержимое(коэффициенты) постоянно обновляется(подгружается js)?

парсинг страниц
как вырвать с этого сайта (https://sport-booking.ru/betting-odds/?q=%D1%87%D0%B5%D0%BC%D0%BF%D0%B8%D0%BE%D0%BD%D0%B0%D1%82+&s=) таблицу

Парсинг страниц
Здравствуйте, имеются страницы такого вида...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru