質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

512閲覧

GASでXMLをスクレイピング、要素取得でエラーがでます

BBA

総合スコア60

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

1グッド

0クリップ

投稿2022/10/13 12:27

XMLのスクレイピングをGASでしてます

XmlからXmlServiceを使用して取得したくコードを書いています。
取得したいXML

途中まで取得できましたが、
子要素でエラーになってしまいました。
ItemSentenceの子にColumnが2つあって一つ目は取得できて二つ目が取得できず、
それぞれに定義して取得したいですが、エラーになってしまいました。

実現したいこと

最終はスプレッドシートにXMLデータを保存
することです。
下記の表のようにするのが目標です

ArticleCaptionArticleTitleItemTitleSentence
(業務)第三条 司法書士は、この法律の定めるところにより、他人の依頼を受けて、次に掲げる事務を行うことを業とする。
登記又は供託に関する手続について代理すること。

<ItemSentence>の子の
<Column Num="1">
<Column Num="2">
をそれぞれ定義して取得したいです。

繰り返し処理の場合でも、エラーになってしまいます。

発生している問題・エラーメッセージ

エラー TypeError: itemSentence.getElementByNum is not a function

該当のソースコード

function parseXml() { let url = 'https://elaws.e-gov.go.jp/api/1/lawdata/昭和二十五年法律第百九十七号'; let xml = UrlFetchApp.fetch(url).getContentText(); let document = XmlService.parse(xml); let root = document.getRootElement(); const applData = root.getChild("ApplData"); const lawFullText = applData.getChild("LawFullText"); const law = lawFullText.getChild("Law"); const lawBody = law.getChild("LawBody"); const mainProvision = lawBody.getChild("MainProvision"); const chapter = mainProvision.getChild("Chapter"); const articles = chapter.getChildren("Article"); articles.forEach(article => { const itemtitle = item.getChild("ItemTitle"); const itemSentence = item.getChild("ItemSentence"); console.log(itemtitle.getText()); const column = itemSentence.getChild("Column"); if (column == null){ const sentence = itemSentence.getChild("Sentence"); console.log(sentence.getText()); }else{ const column1 = itemSentence.getElementByNum('1')←●エラーの箇所●Num=”1”を取得したい const sentence = column1.getChild("Sentence"); console.log(sentence.getText());} } }); }

XML

1<Article Num="1"> 2<ArticleCaption>(施行期日)</ArticleCaption> 3<ArticleTitle>第一条</ArticleTitle> 4<Paragraph Num="1"> 5<ParagraphNum/> 6<ParagraphSentence> 7<Sentence Function="main" Num="1" WritingMode="vertical">この法律は、平成十五年四月一日から施行する。</Sentence> 8<Sentence Function="proviso" Num="2" WritingMode="vertical">ただし、次の各号に掲げる規定は、当該各号に定める日から施行する。</Sentence> 9</ParagraphSentence> 10<Item Num="1"> 11<ItemTitle>一</ItemTitle> 12<ItemSentence> 13<Sentence Num="1" WritingMode="vertical">略</Sentence> 14</ItemSentence> 15</Item> 16<Item Num="2"> 17<ItemTitle>二</ItemTitle> 18<ItemSentence> 19<Column Num="1">←●ここ● 20<Sentence Num="1" WritingMode="vertical">附則第五条及び第九条の規定</Sentence> 21</Column> 22<Column Num="2">←●ここ● 23<Sentence Num="1" WritingMode="vertical">公布の日</Sentence> 24</Column> 25</ItemSentence> 26</Item> 27</Paragraph> 28</Article>

試したこと

参考サイト

const hoge = document.querySelectorAll('.hoge')

こちらも試しましたがエラー出ました。

初歩的なミスかもしれません。
どなたかお教えいただけないでしょうか。
よろしくお願いします。

Cocode👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bebebe_

2022/10/13 23:54

記載されているコードでこのエラーになりますか?
BBA

2022/10/14 11:06

なります。 ちょっと、コード色々触ってたら他の問題も出てきたので、 一旦こちら解決済みにさしてもらいます。すみません。
guest

回答1

0

自己解決

ちょっと別の問題が出たので、一旦保留。

投稿2022/10/14 11:07

BBA

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問