web-dev-qa-db-ja.com

IMPORTXMLがGoogleスプレッドシートのデータをスクレイピングできない場合の挿入エラー(またはスペーサー)

IMPORTXMLを使用して、基本的に車両在庫フィードファイルを作成しています。

価格がメインのウェブサイトに含まれていない場合に問題が発生します。価格が含まれていないように見える場合、IMPORTXMLはその価格をスキップしており、エラーや何かは含まれていません。また、シート上のその場所にある次の価格が含まれています。

これらのトラックをvin、msrp、価格などで整列しようとしているため、これは問題です。

https://docs.google.com/spreadsheets/d/1KceS3krlbpU2FjQly-tK8N5qiwshIq3rQFQ36WRNV5U/edit?usp=sharing

私のシートで特定の例を示すには、このビン番号:1FTMF1E5XKKE62311現在、当サイトに記載されている価格はありません。空白のセルやエラーを挿入する代わりに、IMPORTXMLはこの後にリストされているユニットの価格を挿入しています。これにより、これらの車両の価格がWebサイトに掲載されている場合でも、シートの最後に空白の価格のクラスターが作成されます。基本的に、これは最初のスキップされた価格の後でシート全体を捨てます。

現在、インターネットの価格は次のようになっています。

=IFERROR({IMPORTXML(A4,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A5,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A6,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A7,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A8,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A9,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A10,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A11,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']")},"")

エラーハンドラが機能することを期待していましたが、残念ながら機能しませんでした。リストされていない価格がある場合に、インポート注文を破棄しない方法について誰かが何か考えを持っていますか?

何かアドバイスをいただければ幸いです!!

update列を作成してそれを試してみたい場合は、シートの上で誰でも編集できるように変更しました

1
Brian L
  • 配列リテラルエラーを回避するには、次のようにする必要があります。
=QUERY({
 IFERROR(IMPORTXML(A4,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A5,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A6,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A7,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A8,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A9,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A10, "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A11, "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "")}, 
 "where Col1 is not null", 0)
0
user0

編集:不足しているデータを見つける方法を見つけました


元の回答:
データがないのでエラーはありません:IMPORTXML特定のXpathクエリに対応するすべてのデータを取得し、何もない場合は何も表示しません。
結論:IFERRORはここでは役に立たない。ただし、次のように_|_を使用してIMPORTXMLクエリを連結することができます。

_=IMPORTXML(A4,"//h2[@class='vehicleTitle margin-x']/a/span[@class='notranslate']")
=IMPORTXML(A4,"//div[@class='col-xs-12 visible-xs margin-top-1x']/ul/li/span[@style='text-decoration:line-through;'][@class='pull-right']")
etc....
_

なる

_     =IMPORTXML(A4,"//h2[@class='vehicleTitle margin-x']/a/span[@class='notranslate'] |
 //div[@class='col-xs-12 visible-xs margin-top-1x']/ul/li/span[@style='text-decoration:line-through;'][@class='pull-right'] |
 //div[@class='col-xs-12 visible-xs margin-top-1x']//li[@class='vinDisplay']/span | 
 //div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']
")
_

結果はこのような配列です:

_2019 Ford F-150 XL
$30,045
$20,427
1FTMF1CB6KKC12430
2019 Ford F-150 XL
$30,045
$20,427
1FTMF1CB8KKC12381
2019 Ford F-150 XL
$31,450
$21,846
1FTMF1CBXKKD26088
...
  and then where there's no data for the price : 
...
2019 Ford F-150 XLT
$54,200
$39,758
1FTEW1E53KKC32677
2019 Ford F-150 XL    here's the vehicle 
1FTMF1E5XKKE62311     VIM but no price
2019 Ford F-150 XLT
$53,620
$39,853
1FTEW1E43KKD96874
_

データを並べ替えるソリューションを見つけるだけです。


編集:データを再配置するためのソリューション

結果列_B2:B_の横にあるこの式を_C2_に入れて展開します=countif(arrayformula(regexmatch(INDIRECT("B2:B"&ROW(B2)),"Ford")),true)キーワードFordを使用して新しい車両名ごとにカウンターをインクリメントします。

Counter for each new vehicule

次に、同じアイデアを使用して、各エントリの配列を作成しました。

_=transpose(FILTER($B$2:$B$401,$C$2:$C$401=row(A1)))
_

データが欠落しているときの最終結果:

Array with the missing data

0
pjmg