ImportXMLを使用して、データとともにHTMLタグをプルできますか?
例えば:
importxml(A1,"//div[@id='qlist-wrapper']") on stackoverflow.com
iD qlist-wrapper
を持つdiv内のすべてのデータを内破形式でプルします。
関連する<div>
sおよび<li>
sおよび<ul>
sとともにデータをプルする方法はありますか?
奇妙な要求は理解していますが、1か所で必要があるので、とにかくタグをデータと一緒にプルすることは本当に役立ちます。
いいえ、=importXML
はこの種のXMLフォーマットを提供しません。ただし、次のように script を使用して、HTMLタグを含むページの一部を取得できます。
function getHtml() {
var text = UrlFetchApp.fetch("http://webapps.stackexchange.com").getContentText();
var div = text.match(/<div id="qlist-wrapper">[\s\S]*(?=<div>\s*<a id="home-browse")/)[0];
var qlist = XmlService.parse(div);
var root = qlist.getRootElement();
var list = root.getChild('div');
var children = list.getChildren();
var sheet = SpreadsheetApp.getActiveSheet();
for (var i = 0; i < children.length; i++) {
sheet.getRange(i+1, 1).setValue(XmlService.getPrettyFormat().format(children[i]));
}
}
最初の行は、ページのHTMLソースを取得します。 XmlService.parse
で解析できる場合もありますが、スクリプトなどの複雑なページの場合、通常これは失敗します。このため、正規表現を使用してフラグメントのみを抽出し、解析します。解析後、 XmlService が提供するものは何でもできます。質問のリストを取得し、それらを読み取り可能なXML形式の個別のセルに入れます。もちろん、ここからさらに深く掘り下げて特定のXML要素を抽出できます。
重要な注意点は、Googleクローラーはサイトへの匿名の訪問者であるということです。匿名ユーザー向けにページが提供されますが、これは表示とは異なります。
<div class="question-summary narrow" id="question-summary-91365">
<div onclick="window.location.href='/questions/91365/filtering-by-case-sensitive-string-equality'" class="cp">
<div class="votes">
<div class="mini-counts">
<span title="2 votes">2</span>
</div>
<div>votes</div>
</div>
<div class="status answered-accepted" title="one of the answers was accepted as the correct answer">
<div class="mini-counts">
<span title="2 answers">2</span>
</div>
<div>answers</div>
</div>
<div class="views">
<div class="mini-counts">
<span title="41 views">41</span>
</div>
<div>views</div>
</div>
</div>
<div class="summary">
<h3>
<a href="/questions/91365/filtering-by-case-sensitive-string-equality" class="question-hyperlink" title="I discovered (when answering this question) that string comparison in filter is case insensitive: the formulas =filter(A:A, B:B = "Yes") and =filter(A:A, B:B = "YES") have the same output. ...">Filtering by case-sensitive string equality</a>
</h3>
<div class="tags t-google-spreadsheets">
<a href="/questions/tagged/google-spreadsheets" class="post-tag" title="show questions tagged 'google-spreadsheets'" rel="tag">google-spreadsheets</a>
</div>
<div class="started">
<a href="/questions/91365/filtering-by-case-sensitive-string-equality/?lastactivity" class="started-link">
modified
<span title="2016-03-30 19:42:07Z" class="relativetime">54 mins ago</span>
</a>
<a href="/users/79865/404">404</a>
<span class="reputation-score" title="reputation score 11872" dir="ltr">11.9k</span>
</div>
</div>
</div>