#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
...