4 返信 最新の回答 日時: Feb 29, 2016 4:28 AM ユーザー:takalovene

    スクレイピングする場合ポジションでの逆引き

    takalovene

      参考のソースが下記なのですが

      カテゴリーだけ取り出したい場合

      前列のポジションを取得する場合

      アドレスなどの変動するキーワードだと

      規則的にカテゴリA,カテゴリB,カテゴリCを取得出来ないので

      </a>から前列の最初の">までがどれだけということで取得するのが良いと思いました。

      しかし、ポジションなどの関数などでこちらを取得していくのは不可能かなと思いました。

      逆引きして取得する方法などありますでしょうか。

       

       

      <div id="wayfinding-breadcrumbs_container" class="a-section a-spacing-none a-padding-medium">

      <div id="wayfinding-breadcrumbs_feature_div" class="a-subheader a-breadcrumb feature" data-feature-name="wayfinding-breadcrumbs">

          <ul class="a-horizontal a-size-small">

               <li><span class="a-list-item">

                  <a class="a-link-normal a-color-tertiary" href="変数のアドレス長さも変わる可能性ありA">

                      カテゴリA

                  </a>

               </span></li>

               <li class="a-breadcrumb-divider"><span class="a-list-item a-color-tertiary">

                   &rsaquo;

               </span></li>

               <li><span class="a-list-item">

                  <a class="a-link-normal a-color-tertiary" href="/変数のアドレス長さも変わる可能性ありB">

                      カテゴリB

                  </a>

               </span></li>

               <li class="a-breadcrumb-divider"><span class="a-list-item a-color-tertiary">

                   &rsaquo;

               </span></li>

               <li><span class="a-list-item">

                  <a class="a-link-normal a-color-tertiary" 変数のアドレス長さも変わる可能性ありC">

                      カテゴリC

                  </a>

               </span></li>

          </ul>

      </div>

      </div>

        • 1. Re: スクレイピングする場合ポジションでの逆引き
          Hiro.

          FM機能だけを利用した簡易的な作例サンプルをアップしましたので、参考ください。

          カーソル挿入+「>」か「<」キー押しで、前方・後方の2タグ間抽出と

          その履歴ログを自動でフィールド代入します。

           

           ●サンプル「スクレイピング.fmp12」→ http://yahoo.jp/box/mb_9tz

           

          【操作法】

          ・カーソルを<・・|・>タグの中に挿入します。その状態で、

          ・1つ後方のタグ間の内容を抽出するときは、「>」トリガーキーを押します。

             後方取出し結果テキストは「青色」に着色して記録されます。

          ・1つ前のタグとの間の内容を抽出するときは、「<」トリガーキーを押します。

              前方取出し結果テキストは「赤色」に着色して記録されます。"

          • 2. Re: スクレイピングする場合ポジションでの逆引き
            fukky

            例示された HTML から「カテゴリA〜C」を取得したい場合

            <span class="a-list-item">〜</span> を取得して HTML タグを除去

            <a class="a-link-normal a-color-tertiary"〜</a> を取得して HTML タグを除去


            「カテゴリA〜C」のリンク部分を取得したい場合

            <span class="a-list-item">〜</span> の間の最初の a タグの href 属性を取得


            どのような方法でもスペースや改行は除去する必要がありますが

            少なくとも2つ以上の規則性が発見できます。


            <〜> を タグとして扱えばタグ除去は比較的簡単です。おそらくカスタム関数もあります。


            HTML タグのように同じ文字が何度も出現する場合、

            2段階の取得を行って中間生成物を作りその中から再評価する手法が有効です。


            <a href="xxxxxxxx">sample</a>

            <span class="xxx"><a href="zzzzzzzz">target</a></span>


            ↑この場合 <span class="xxx">〜</a> とすると先の </a> が邪魔になるので

            <span class="xxx">〜</span> を取得してから href="〜" を取得する的な。


            HTML からのスクレイピングは HTML の出力元がブログサービスや CMS 等が主流となった現在は

            前後のタグの class や id などの属性から規則性が見つけやすくなっているといえるでしょう。


            規則性の発見を自動化するのは不可能でしょうが

            一度見つけた規則が崩れることは機械的に出されるページでは多くはないので

            スクリプトにしてしまえばメンテナンスは少なくてすみます。


            スクレイピングをされる際には取得したデータを何に使うのか。

            HTML の作成元がそのような利用を許可しているのかという点も忘れずに確認されると良いでしょう。

            著作権やライセンスは結果を求めるあまり忘れがちですが大切なことです。



            なお、他の質問で Hiro. さんにも指摘されていたと思いますが、

            別の掲示板でマルチポストした投稿はきちんと筋が通るように対処されることをおすすめしますよ。

            • 3. Re: スクレイピングする場合ポジションでの逆引き
              takalovene

              返信遅くなり申し訳ございません。

              解釈するのに時間を要してしまいました。

               

              サンプルまで作って頂いて感謝です。

              ありがとうございました。

              • 4. Re: スクレイピングする場合ポジションでの逆引き
                takalovene

                返信遅くなり申し訳ございません。

                すいません、繰り返しとなってしまいますが

                お返事の内容に理解するのに時間を要してしまいました。

                申し訳ございません。


                すごく勉強になりました。


                ご注意、ご指摘もありがとうございました。

                次回より、もっと注意を払います。

                申し訳ございませんでした。