[英]XPath for an <address> tag using ImportXML in Google Sheets
我正在嘗試使用 importXML 和 Google Sheets 從新聞網站中提取文章的作者姓名。 代碼如下所示:
<div class="grp-content">
<h2 class="title">
<div class="excerpt">
<footer class="byline">
<address data-aurl="/author/john-smith/" data-aname="JOHN
SMITH"></address>
我嘗試了這條路徑的幾種變體,經常返回“導入的內容為空”:
=importxml(A2,"//div[@class='grp-content']/footer/address/@data-aname")
任何幫助都會很棒。 謝謝!
如果你的 XPath 被修改了,這個怎么樣?
//div[@class='grp-content']//footer//address/@data-aname
而且這也可以使用//address/@data-aname
如果這些不是你想要的結果,你能提供“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
被返回。//*[@class='byline']/../h2
和//footer[@class='byline']/../h2
,返回#N/A
。在我的環境中,無法檢索address
的值。 從上面的結果,我發現IMPORTXML()
可能無法正確解析footer
。 因此,作為一種解決方法,我建議使用 Google Apps Script 而不是IMPORTXML()
。
在這種情況下使用 Google Apps 腳本時。 作為示例腳本,這個怎么樣? 無法直接解析此 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) }
getValuesFromUrl()
函數。 這樣,您可以在 Log 中看到這些值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.