Разбор HTML, несколько классов - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу создать скрипт PowerShell, чтобы получать информацию с веб-сайта. Я пытаюсь найти первое вхождение следующего HTML-тега веб-сайта:

<div class="dDoNo gsrt"><span data-dobid="hdw">Text I want to find</span></div>

Я безуспешно использую следующий код PowerShell, но не выводит:

$WebResponse = Invoke-WebRequest "https://www.google.co.in/search?hl=en&q=define+Text"
($WebResponse.ParsedHtml.GetElementsByTagName(‘div’) | Where {
    $_.ClassName -eq ‘dDoNo’
}).InnerText

Чтобы быть более точным: Я пытаюсь получить определение слова, соскабливая HTML с Google, и использую этот класс в качестве основы: googleDictionaryAPI класс

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Спасибо @Ansgar за указание на правильное решение.

Основная проблема заключалась в том, что ответ, который я получил от Invoke-WebRequest, отличался от того, который я получил от браузера. Решением было определить UserAgent при вызове запроса:

$WebResponse = (Invoke-WebRequest -Uri "https://www.google.co.in/search?hl=en&q=define+Text" -UserAgent "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36")

($WebResponse.ParsedHtml.DocumentElement.GetElementsByTagName('div') | Where {
    $_.ClassName -match '\bdDoNo\b'
}).InnerText
0 голосов
/ 09 ноября 2018

Во-первых, вам нужно вызвать GetElementsByTagName() на DocumentElement дочернем узле ParsedHtml, иначе вы вообще не получите никаких результатов. Кроме того, строка класса «dDoNo gsrt» не равна «dDoNo», поэтому вам необходимо проверить, содержит ли значение имя класса «dDoNo».

Изменение

($WebResponse.ParsedHtml.GetElementsByTagName(‘div’) | Where {
    $_.ClassName -eq ‘dDoNo’
}).InnerText

до

($WebResponse.ParsedHtml.DocumentElement.GetElementsByTagName('div') | Where {
    $_.ClassName -match '\bdDoNo\b'
}).InnerText

и код должен делать то, что вы хотите.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...