Closed chai222222 closed 2 months ago
jangetterの標準機能で、各サイトの jan, title、-g オプションでイメージを取得する情報などは各サイト用クラスにハードコーディングされているが、外だししてカスタマイズしてもらうようにするための検討用 issue。
-g
そのため、商品ページからのデータ取得定義などがどのように定義されているかを簡単にわかってもらえるように説明してみる。
各サイト単位のクラスファイルがあるが、設定情報は定数で以下のようになっている。
const MYOJO_CONSTANTS = { searchConfig: { prefix: 'Myojo', top: 'https://www.myojofoods.co.jp/search/', lastSupportedDate: '2022/06/02: 19:00:00', searchPageSelectors: { productsLink: 'div.ns-c-items__item > a', onlyCurrentPage: true, nextLink: 'section.ns-p-search__results__products a.ns-c-a_button__more', searchText: 'header.ns-p-search__header input[name="q"]', searchButton: 'button[type="submit"]', }, productPageSelectors: { jan: '//dt[contains(text(), "JANコード")]/../dd', title: 'h1.ns-headline_01', allergy: { selector: 'ul.ns-c-list_allergens--item li.active a', }, }, productPageImages: { suffix: '.jpeg', }, productPageImageSelectors: { picture: 'section.ns-p-item__main img', }, replacer: { title: [ REPLACERS.trim, ], }, }, };
この中で、各商品ページのための情報を抜いて説明する。
productPageSelectors: { jan: '//dt[contains(text(), "JANコード")]/../dd', title: 'h1.ns-headline_01', allergy: { selector: 'ul.ns-c-list_allergens--item li.active a', }, }, productPageImages: { suffix: '.jpeg', }, productPageImageSelectors: { picture: 'section.ns-p-item__main img', },
productPageSelectors: { // jan: '#basicInfo tbody > tr:nth-child(2) td img', jan: 'url', // category: '#basicInfo tbody > tr:first-child td', title: 'title', name: '//span[contains(text(), "名称")]/../../td', allergy: { selector: '//th[contains(text(), "物質名")]/..//img', attr: 'alt', }, },
product*のキーで始まる定義が、各商品情報取得情報である。 以下簡単にまとめて説明する。
productPageSelectorsが基本的に各画面のテキストを取得する情報である。2パターンある。
selector
attr
separator
参考:ぐぐってもらえるといい
画面からのデータの複数取得(タイトル+グラム等)ができたら結合も可能となっている。 また、結合したあと最後に replacer 定義にて、均一的な各属性の置き換えが可能となっている(https://github.com/chai222222/jangetter?tab=readme-ov-file#jangetterrc)。 各サイトごとに個別の置き換えはハードコーディングされているが、これは取得するデータもハードコーディングされているためである。 取得するデータをカスタマイズできるようにした場合、ここも各サイト単位にカスタマイズできるようにしたほうが良いかもしれないが、要検討。
完了したのでクローズ
jangetterの標準機能で、各サイトの jan, title、
-g
オプションでイメージを取得する情報などは各サイト用クラスにハードコーディングされているが、外だししてカスタマイズしてもらうようにするための検討用 issue。そのため、商品ページからのデータ取得定義などがどのように定義されているかを簡単にわかってもらえるように説明してみる。
現設定部の仕様
各サイト単位のクラスファイルがあるが、設定情報は定数で以下のようになっている。
この中で、各商品ページのための情報を抜いて説明する。
明星
Coop
product*のキーで始まる定義が、各商品情報取得情報である。 以下簡単にまとめて説明する。
productPageSelectorsが基本的に各画面のテキストを取得する情報である。2パターンある。
selector
キーの値がセレクタ(cssセレクタ or XPATH)として定義され、単数・複数の定義が可能。単数定義でも複数マッチした場合に複数の値とする(Coopの例)。attr
キーがある場合、値とhtmlのテキストコンテンツから取得するのではなく、指定された属性から取得するようにする。separator
キーがある場合、複数の値を結合するときにの値が使われるが、指定がない場合には "・" がつかわれる。参考:ぐぐってもらえるといい
画面からのデータの複数取得(タイトル+グラム等)ができたら結合も可能となっている。 また、結合したあと最後に replacer 定義にて、均一的な各属性の置き換えが可能となっている(https://github.com/chai222222/jangetter?tab=readme-ov-file#jangetterrc)。 各サイトごとに個別の置き換えはハードコーディングされているが、これは取得するデータもハードコーディングされているためである。 取得するデータをカスタマイズできるようにした場合、ここも各サイト単位にカスタマイズできるようにしたほうが良いかもしれないが、要検討。