Получение значений с веб-сайта

#html #.net #powershell #scripting

#HTML #.net #powershell #сценарии

Вопрос:

Моя постановка задачи выглядит следующим образом — мне нужно получить все названия отелей и соответствующие цены с веб-портала. Если не с помощью скрипта, для меня это утомительный ручной процесс.

Например, по следующему URL-адресу мне нужно название всех отелей с соответствующими ценами: http://hotel.makemytrip.com/makemytrip/site/hotels/search?session_cId=1403778791562amp;city=SLVamp;country=INamp;checkin=06282014amp;checkout=06302014amp;area=amp;roomStayQualifier=1e0eamp;type=amp;sortName=amp;searchText=amp;isBaitNWait=nullamp;fullSearch=false

Желаемый результат :

 Hotel Name                     Price
Oberoi Wildflower Hall         16,500
Hotel Chaman Palace            1,879
  

Я делаю это на языке Powershell. В принципе, мне нужно понять, как получить значение одного заполнителя (название отеля или цена).До сих пор я пробовал это.

 $surl="http://hotel.makemytrip.com/makemytrip/site/hotels/search?session_cId=1403778791562amp;city=SLVamp;country=INamp;checkin=06282014amp;checkout=06302014amp;area=amp;roomStayQualifier=1e0eamp;type=amp;sortName=amp;searchText=amp;isBaitNWait=nullamp;fullSearch=false"
$ie = new-object -com "InternetExplorer.Application"
$ie.visible = $true
$ie.navigate($surl)
$doc = $ie.Document
$element = $doc.getElementsByClassName("hotelImgLkflL")
$element > d:element.txt
  

Однако я получаю следующее сообщение об ошибке.

Вы не можете вызвать метод для выражения с нулевым значением.

Update : Теперь я пытаюсь сделать это через $web.DownloadString и выяснил, что источник имеет следующий шаблон для всех названий отелей :

 id="200701171240402395" title="Oberoi Wildflower Hall" href="/makemytrip/site/hotels/detail?
id="201111211716292072" title="Hotel Chaman Palace" href="/makemytrip/site/hotels/detail?
id="200701121106345886" title="Hotel Baljees Regency" href="/makemytrip/site/hotels/detail?
  

Как мне теперь поступить? Спасибо.

Ценю любые рекомендации.

Ответ №1:

Navigate() выполняется асинхронно, поэтому вам нужно дождаться полной загрузки веб-сайта, прежде чем вы сможете работать с ним:

 ...
$ie.navigate($surl)
while ( $ie.ReadyState -ne 4 ) { Start-Sleep -Milliseconds 100 }
$doc = $ie.Document
...