GithubHelp home page GithubHelp logo

goto-eater-data's People

Contributors

actions-user avatar github-actions[bot] avatar terukizm avatar

Stargazers

 avatar

Watchers

 avatar  avatar

goto-eater-data's Issues

大阪府のGeocodeError

https://goto-eat.weare.osaka-info.jp/gotoeat/%e3%82%a4%e3%82%bf%e3%83%a1%e3%82%b7%e3%83%a4%e3%80%80%e3%83%95%e3%82%b8/

DAMSが「大阪市東心斎橋」を「大阪市東区」と誤解釈するのが原因。「大阪市**区東心斎橋」なら正しく取れる。

スクリーンショット 2020-12-18 3 44 52

これに限らずDAMSには「政令指定都市における区を略された場合に想定外の挙動になりがち」問題がある。むずかしい

    {
            "_ERROR": "GeocodeError",
            "_dams_name": "",
            "_dams_score": "",
            "_dams_tail": "",
            "_gsi_map_url": "",
            "address": "大阪市東心斎橋1-6-10リップル周防町1F",
            "area_name": "ミナミ",
            "closing_day": "月曜日",
            "detail_page": "https://goto-eat.weare.osaka-info.jp/gotoeat/%e3%82%a4%e3%82%bf%e3%83%a1%e3%82%b7%e3%83%a4%e3%80%80%e3%83%95%e3%82%b8/",
            "genre_code": 3,
            "genre_name": "イタリアン・フレンチ",
            "google_map_url": "",
            "lat": "",
            "lng": "",
            "normalized_address": "",
            "official_page": "",
            "opening_hours": "11:30-23:00",
            "provided_lat": "",
            "provided_lng": "",
            "shop_name": "イタメシヤ フジ",
            "tel": "06-6563-7991",
            "zip_code": "542-0083"
        }

山口県でページ送りをすると重複して表示される場合がある

「エリアと料理で探す」をした結果をページ送りすると重複表示される場合がある。
https://gotoeat-yamaguchi.com/use/

内部的には#10 と同じ問題ではないかと思う。

ただ山口県は割とページ送りの最初の方でも重複が出ており、結果として200件くらい重複している。ソート順がそもそも何なのかいまいちわからない。

$ curl -sS "https://gotoeat-yamaguchi.com/use/page/[1-5]/?post_type=post&s" | grep '<h3><a href="https://gotoeat-yamaguchi.com/use/' | sort | uniq -d
                                                <h3><a href="https://gotoeat-yamaguchi.com/use/4053/">居酒屋 ひなたぼっこ</a></h3>
                                                <h3><a href="https://gotoeat-yamaguchi.com/use/5598/">旬菜KOUNOIKE</a></h3>

$ curl -sS "https://gotoeat-yamaguchi.com/use/page/[1-5]/?post_type=post&s" | grep '<h3><a href="https://gotoeat-yamaguchi.com/use/' | sort | uniq -d
                                                <h3><a href="https://gotoeat-yamaguchi.com/use/1206/">のん太鮨 山口店</a></h3>
                                                <h3><a href="https://gotoeat-yamaguchi.com/use/1327/">とろ麦 おのだサンパーク店</a></h3>
                                                <h3><a href="https://gotoeat-yamaguchi.com/use/6048/">オリエンタルバール</a></h3>

$ curl -sS "https://gotoeat-yamaguchi.com/use/page/[1-5]/?post_type=post&s" | grep '<h3><a href="https://gotoeat-yamaguchi.com/use/' | sort | uniq -d
                                                <h3><a href="https://gotoeat-yamaguchi.com/use/1456/">大衆酒場ひょうたん</a></h3>
                                                <h3><a href="https://gotoeat-yamaguchi.com/use/5412/">油そば専門店「歌志軒」 山口小郡店</a></h3>

静岡県のGeocodeError

以下についてはDAMSでも期待通りに取れるはずだが、GeocodeErrorになっている原因は不明。後で調べる。
正しくは「静岡県駿東郡清水町伏見52−1 」なのでDAMSの結果はおそらく問題ないはず。
(全角ハイフンが区切り文字に入ってるのがやや気になる)

スクリーンショット 2020-12-18 3 54 19

        {
            "_ERROR": "GeocodeError",
            "_dams_name": "",
            "_dams_score": "",
            "_dams_tail": "",
            "_gsi_map_url": "",
            "address": "静岡県清水町伏見52-1サントムーン柿田川",
            "area_name": "",
            "closing_day": "",
            "detail_page": "https://gotoeat.s-reserve.com/index/118031832.html",
            "genre_code": 3,
            "genre_name": "洋食",
            "google_map_url": "",
            "lat": "",
            "lng": "",
            "normalized_address": "",
            "official_page": "",
            "opening_hours": "",
            "provided_lat": "",
            "provided_lng": "",
            "shop_name": "パタパタサントムーン店",
            "tel": "055-9557-2122",
            "zip_code": "411-0907"
        },

以下の2件については、DAMSが入力内容の「静岡県清水区」を「静岡県清水市」(合併前の旧市名)と解釈してしまうのが原因。
なお、「静岡県静岡市清水区」が正しい。(清水市が静岡市と合併して清水区になった)

スクリーンショット 2020-12-18 3 51 55

        {
            "_ERROR": "GeocodeError",
            "_dams_name": "",
            "_dams_score": "",
            "_dams_tail": "",
            "_gsi_map_url": "",
            "address": "静岡県清水区草薙1-6-7岩崎ビル",
            "area_name": "",
            "closing_day": "",
            "detail_page": "https://gotoeat.s-reserve.com/index/118019358.html",
            "genre_code": 1,
            "genre_name": "居酒屋",
            "google_map_url": "",
            "lat": "",
            "lng": "",
            "normalized_address": "",
            "official_page": "http://www.tokkyu.com/",
            "opening_hours": "",
            "provided_lat": "",
            "provided_lng": "",
            "shop_name": "串特急草薙店",
            "tel": "054-348-0261",
            "zip_code": "424-0886"
        },

        {
            "_ERROR": "GeocodeError",
            "_dams_name": "",
            "_dams_score": "",
            "_dams_tail": "",
            "_gsi_map_url": "",
            "address": "静岡県清水区島崎町149河岸の市いちば館2F",
            "area_name": "",
            "closing_day": "",
            "detail_page": "https://gotoeat.s-reserve.com/index/118009638.html",
            "genre_code": 1,
            "genre_name": "居酒屋",
            "google_map_url": "",
            "lat": "",
            "lng": "",
            "normalized_address": "",
            "official_page": "http://www.surugasuisan.com",
            "opening_hours": "",
            "provided_lat": "",
            "provided_lng": "",
            "shop_name": "浜焼小屋馬鹿貝",
            "tel": "054-355-5252",
            "zip_code": "424-0823"
        }

三重県に、住所が愛知県のデータが入っている

ドウシテ…

https://area34.smp.ne.jp/area/card/26722/B24Yg8/M?S=lbrgkh0qcs0k
https://area34.smp.ne.jp/area/card/26722/1CX5Bk/M?S=lbrgkh0tes0k
https://area34.smp.ne.jp/area/card/26722/ADJ0bk/M?S=lbrgkh0qcp0k
https://area34.smp.ne.jp/area/card/26722/cILT3K/M?S=lbrgkh0qck0k
https://area34.smp.ne.jp/area/card/26722/Gdp4A3/M?S=lbrgkh0qcm0k
https://area34.smp.ne.jp/area/card/26722/j6DWeB/M?S=lbrgkh0qcq0k

スクリーンショット 2020-12-19 21 51 23

(現状、住所の正規化ロジックで「住所が指定された都道府県名で始まらない場合は追加する」みたいなのが入っているので、三重県中に「愛知県名古屋市…」みたいなのがあると「三重県」が補足されて「三重県愛知県名古屋市」みたいになっている。

ただこれは流石にどう考えても公式サイトのデータがおかしいんじゃないのか…?って気がするので保留)

crawlerが大阪府で稀にリトライしきれずに504 Gateway Time-outになる

前も1回あり(2020-12-18 (金))、retry回数(settings.RETRY_TIMES)を2回→5回に増やして対応した記憶がある。

2021-01-06 03:42:40 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://goto-eat.weare.osaka-info.jp/gotoeat/page/685/?search_element_0_0=2&search_element_0_1=3&search_element_0_2=4&search_element_0_3=5&search_element_0_4=6&search_element_0_5=7&search_element_0_6=8&search_element_0_7=9&search_element_0_8=10&search_element_0_9=11&search_element_0_cnt=10&search_element_1_cnt=17&search_element_2_cnt=1&s_keyword_3&cf_specify_key_3_0=gotoeat_shop_address01&cf_specify_key_3_1=gotoeat_shop_address02&cf_specify_key_3_2=gotoeat_shop_address03&cf_specify_key_length_3=2&searchbutton=%E5%8A%A0%E7%9B%9F%E5%BA%97%E8%88%97%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B&csp=search_add&feadvns_max_line_0=4&fe_form_no=0> (failed 6 times): 504 Gateway Time-out
  • scrapyはRETRY間隔(5秒後にリトライ等)については簡単に対応する方法がない
    • Exponential BackOffができれば最高なのだが…

大阪府の重複データ

70件近くあるのでページングの実装ミスを疑ったが、特にそうではなく、純粋にデータが二重登録されている。

$ curl -sS "https://goto-eat.weare.osaka-info.jp/gotoeat/page/[878-881]/?search_element_0_0=2&search_element_0_1=3&search_element_0_2=4&search_element_0_3=5&search_element_0_4=6&search_element_0_5=7&search_element_0_6=8&search_element_0_7=9&search_element_0_8=10&search_element_0_9=11&search_element_0_cnt=10&search_element_1_cnt=17&search_element_2_cnt=1&s_keyword_3&cf_specify_key_3_0=gotoeat_shop_address01&cf_specify_key_3_1=gotoeat_shop_address02&cf_specify_key_3_2=gotoeat_shop_address03&cf_specify_key_length_3=2&searchbutton=%E5%8A%A0%E7%9B%9F%E5%BA%97%E8%88%97%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B&csp=search_add&feadvns_max_line_0=4&fe_form_no=0" | grep '<p class="name">' | sort | uniq -d

スクリーンショット 2020-12-18 3 21 30

「宮城県北部」を選択した場合に「仙台市」のデータが一部出てくるため、重複レコードになる

https://gte-miyagi.jp/available03.php

「インドネパール料理KR」ほか20件くらい

該当データは仙台区若林市でも出るため、結果として重複レコードになってしまう。
スクリーンショット 2020-12-18 2 26 23

最初は「宮城県北部」に「仙台市」が含まれる仕様なのかな、と思ったが特にそんなこともなさそう。

参考:

$ curl -sS "https://gte-miyagi.jp/available03.php" | grep 仙台市
                                                <li><a href="./available_aobaku.php">仙台市青葉区のお店</a></li>    <li><a href="./available_miyaginoku.php">仙台市宮城野区のお店</a></li>                                           <li><a href="./available_wakabayashiku.php">仙台市若林区のお店</a></li>                                              <li><a href="./available_taihakuku.php">仙台市太白区のお店</a></li>                                          <li><a href="./available_izumiku.php">仙台市泉区のお店</a></li>                                      </ul>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-33-18</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-5-25遠見塚東2-32</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町3-10-10</span><br>
                                                <span>住所: </span><span>〒984-0042<br>宮城県仙台市若林区大和町5-4-21</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-4-20</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-2-15</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-3-19</span><br>
                                                <span>住所: </span><span>〒984-0042<br>宮城県仙台市若林区大和町4-13-25町田ビル1階**店舗</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-31-12</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町2-6-20</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-5-15グランマーレKMK</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町1-1-6</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-30-3赤から仙台大和町店</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町4-22-10名城タウンやまとB6</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町2-1-15たかろくビルⅡ 1階</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-4-20八島店舗D店</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町4-13-25</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町2-29-3</span><br>
                                                <span>住所: </span><span>〒984-0042<br>宮城県仙台市若林区大和町5-5-25第二やしまビル一階</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-24-15</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-5-25</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町1-21-6</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町3-2-11</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-30-3</span><br>
                                                <span>住所: </span><span>〒984-0042<br> 仙台市若林区 大和町5-30-15</span><br>

島根県でページ送りをすると同じデータが表示される場合がある

事象

加盟飲食店一覧の検索結果において、

  • ページ送りをすると同じデータが複数回表示されることがある。
  • ページをリロードすると、違う内容が表示されることがある。

例:

https://www.gotoeat-shimane.jp/inshokuten/?page=28
スクリーンショット 2021-09-21 17 34 59

https://www.gotoeat-shimane.jp/inshokuten/?page=29
スクリーンショット 2021-09-21 17 35 14

※内部的にキャッシュが効いてるのか、問題ない場合もある
(いまいち再現性が不明、アプリケーションキャッシュかDBキャッシュが効いてるような気もする)

確認方法

curlで25〜35ページを取得、店舗名部分をpcre2grepで抽出して、重複を確認する。
(実行するたびに重複データは変わる)

$ brew install pcre2
$ curl -sS "https://www.gotoeat-shimane.jp/inshokuten/?page=[25-35]" | pcre2grep -M '<p class="title">\n.*' | sort | uniq -d
          凡蔵
          雷神
          かどや
          大正庵
          田吾作
          大はかや
          好酒苑処 大虎
          蔵カフェ おもひで屋
          コーヒーショップ KEN
        <p class="title">

原因

  • 内部的にcreated_at, updated_atだけでorder byソートしている
    • created_at, updated_atなどは同値をとり得る
    • 一部RDBMSでは、同値カラムのオーダー順序は不定になる仕様
    • 特にバッチ処理で一括してデータ投入していると、created_at, updated_atは同値になりやすい
  • created_at, updated_atが同値の場合、クエリ結果が一意にならない
    • limit&offsetの範囲を越えると(ページをまたがると)、(重複)表示される店舗と、まったく表示されない店舗がでてきてしまう

対策

  • ORDER BYにサロゲートキー(id)を追加
    • 例: ORDER BY created_at DESC, id DESC
      • created_atが同値でも、サロゲートキーでユニークにソート順が決まるため、結果は一意になり、ページごとの中身も一意になる

福島県でページ送りすると重複して表示される場合がある

https://gotoeat-fukushima.jp/

たぶん以下と同件。最初の方のデータではおきない。
#10

$ curl -sS "https://gotoeat-fukushima.jp/shop/page/[90-91]/?s" | grep '店舗名' | sort | uniq -d 
                                                                <li class="info-box"><span class="info-label">店舗名</span><span class="info-text">しゅんさい 鱗</span></li>
                                                                <li class="info-box"><span class="info-label">店舗名</span><span class="info-text">四ツ角 大正館</span></li>
                                                                <li class="info-box"><span class="info-label">店舗名</span><span class="info-text">酒場時遊人旬の会津</span></li>

鳥取県でページ送りをすると同じデータが表示される場合がある

https://tottori-gotoeat.jp/store_list/page/19/

目grepはつらいので、こんな感じでcURLで確認すると楽。

$ curl -sS "https://tottori-gotoeat.jp/store_list/page/[10-20]/" | grep "mr-3 d-inline-" | sort | uniq -d
                <h2 class="mr-3 d-inline-block">39 berry farm</h2>
                <h2 class="mr-3 d-inline-block">BAR虹</h2>
                <h2 class="mr-3 d-inline-block">cafe&bakery APLICO</h2>
                <h2 class="mr-3 d-inline-block">豪円</h2>
                <h2 class="mr-3 d-inline-block">鉄板焼 蕾</h2>
                <h2 class="mr-3 d-inline-block">海陽亭 道の駅きなんせ岩美店</h2>
                <h2 class="mr-3 d-inline-block">茶田屋</h2>
                <h2 class="mr-3 d-inline-block">食留芽</h2>
                <h2 class="mr-3 d-inline-block">さんぽう</h2>
                <h2 class="mr-3 d-inline-block">味処四季</h2>
                <h2 class="mr-3 d-inline-block">ひょうたん</h2>
                <h2 class="mr-3 d-inline-block">はちまん茶屋</h2>
                <h2 class="mr-3 d-inline-block">らーめん大學</h2>
                <h2 class="mr-3 d-inline-block">中華料理王福</h2>
                <h2 class="mr-3 d-inline-block">みなとガーデン</h2>
                <h2 class="mr-3 d-inline-block">創作居酒屋 耀</h2>
                <h2 class="mr-3 d-inline-block">グリルダイバーnut'710</h2>
                <h2 class="mr-3 d-inline-block">レークサイド大栄 やすらぎの家</h2>
                <h2 class="mr-3 d-inline-block">有限会社ウイング</h2>
                <h2 class="mr-3 d-inline-block">カフェコンフォート</h2>
                <h2 class="mr-3 d-inline-block">牛ざんまい 鳥取店</h2>
                <h2 class="mr-3 d-inline-block">薬膳カフェ真室茶荘</h2>
                <h2 class="mr-3 d-inline-block">四六時中 米子駅前店</h2>
                <h2 class="mr-3 d-inline-block">とっとり地魚菜や 酒楽</h2>
                <h2 class="mr-3 d-inline-block">山陰うまいもんや 村尾</h2>
                <h2 class="mr-3 d-inline-block">ベーカリー&カフェ「Bon*bon」</h2>
                <h2 class="mr-3 d-inline-block">アジアンダイニング アガン</h2>
                <h2 class="mr-3 d-inline-block">焼肉ホルモンきむら朝日町店</h2>
                <h2 class="mr-3 d-inline-block">三代目網元魚鮮水産米子駅前店</h2>
                <h2 class="mr-3 d-inline-block">日乃屋カレー米子鬼太郎空港店</h2>
                <h2 class="mr-3 d-inline-block">焼肉ホルモンだんだん 米子駅前店</h2>
                <h2 class="mr-3 d-inline-block">UCCカフェメルカード鳥取大丸店B1F</h2>
                <h2 class="mr-3 d-inline-block">はなまるうどんイオンモール鳥取北店</h2>
                <h2 class="mr-3 d-inline-block">イタリア食堂 ターナ・カプリッチョ</h2>
                <h2 class="mr-3 d-inline-block">Cafe on the table</h2>
                <h2 class="mr-3 d-inline-block">カレーハウスCoCo壱番屋米子皆生店</h2>

// 最近のデータだと出ない
$ curl -sS "https://tottori-gotoeat.jp/store_list/page/[1-5]/" | grep "mr-3 d-inline-" | sort | uniq -d

結果として重複レコードになってしまっているのと、場合によってはページングで表示されない店舗が出てきてしまうのが問題。

最初の方のデータではほぼ発生せず、後の方のデータでよく発生していることから、おそらく内部的にcreated_atとかupdated_atとかでOrder Byして検索結果を表示しており、そのへんが同値の場合(初期データをバッチで入れてた場合は同値になりがち)にソート順が不定となり、limit&offsetの間に挟まるとぬーん、、、という感じのやつじゃないかと思う。

order by に idかなんかを追加で入れてあげればいいんじゃないかと思います (的外れだったら申し訳ない)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.