Если ваш XPath изменен, как насчет этого?
//div[@class='grp-content']//footer//address/@data-aname
А также это может быть в состоянии использовать //address/@data-aname
Если это не тот результат, который вы хотите, можетеВы предоставляете URL "A2"?Я хотел бы попытаться проверить.
Редактировать:
По указанному вами URL-адресу я подтвердил данные HTML.В структуре базовая единица URL выглядит следующим образом.
<div class="grp-content">
<h2 class="title">
<a href="### url ###" title="#####">#####</a>
</h2>
<div class="excerpt">
<p>#####</p>
</div>
<footer class="byline">
<address data-aurl="/author/john-smith/" data-aname="JOHN SMITH"></address>
<time datetime="2018-12-11T12:34:56Z">11 Dec 2018, 12:34 PM PST</time>
<a class="byC" href="### url ###" data-dsqi="1234567"></a>
</footer>
</div>
Когда значения извлекаются из структуры выше с использованием IMPORTXML()
, были получены следующие результаты.
Успех
- Можно получить информацию о вкладках каждой
a
. - Когда используются
//*[@class='byC']/@data-dsqi
и //a[@class='byC']/@data-dsqi
, можно извлечь 1234567
. //*[@class='byC']/../text()
и //a[@class='byC']/../text()
используются, 11 Dec 2018, 12:34 PM PST
могут быть получены. - Когда используются
//*[@class='excerpt']/../h2
и //div[@class='excerpt']/../h2
, текстовое значение "h2" может быть восстановлено.
Ошибка
- Когда используются
//*[@class='byC']/../time"
и //a[@class='byC']/../time"
, возвращается #N/A
. - Когда используются
//*[text()='11 Dec 2018, 12:34 PM PST']
и //*[text()='11 Dec 2018, 12:34 PM PST']/@datetime
, возвращается #N/A
. - Когда *Используются 1047 * и
//footer[@class='byline']/../h2
, возвращается #N/A
.
Обходной путь
В моей среде невозможно получить значения address
.Из приведенных выше результатов я пришел к выводу, что IMPORTXML()
может неправильно анализировать footer
.Поэтому в качестве обходного пути я хотел бы предложить использовать Google Apps Script вместо IMPORTXML()
.
Добавлено:
Когда для этой ситуации используется Google Apps Script.Как пример сценария, как насчет этого?Эти данные HTML не могут быть проанализированы напрямую.Таким образом, он извлекает часть значений, включая значения, которые вы хотите использовать с помощью Parser, и анализирует и извлекает значения, используя XmlService .
Пример сценария:
function getValuesFromUrl() {
// Retrieve HTML data
var url = "https://www.breitbart.com/tag/cnn/";
var html = UrlFetchApp.fetch(url).getContentText();
// Parse HTML data
var res = Parser.data(html).from("<section id=\"MainW\">").to("</section>").build();
var decode = XmlService.parse('<r>' + res + '</r>');
var r = decode.getRootElement().getChildren();
// Retrieve values
var values = [];
for (var i = 0; i < r.length; i++) {
var s = r[i].getChildren("article");
for (var j = 0; j < s.length; j++) {
var t = s[j].getChildren("div");
for (var k = 0; k < t.length; k++) {
var u = t[k].getChildren("footer");
for (var l = 0; l < u.length; l++) {
values.push(u[l].getChild("address").getAttribute("data-aname").getValue());
}
}
}
}
Logger.log(values)
}
Примечание:
- Чтобы использовать этот сценарий, скопируйте и вставьте сценарий в редактор сценариев.
- Перед запуском сценария установите библиотеку GAS Parser.Подробную информацию вы можете найти здесь .
- После установки библиотеки, пожалуйста, запустите функцию
getValuesFromUrl()
.Этим вы можете видеть значения в журнале.
Ссылки: