Rawler基本
XAML文法の基本
   例:<Page></Page>
       タグで囲まれているのが一つの塊。
       必ず</***>というように閉じる。
   例:<Page>
        <Report></Report>
         </Page>
       タグで挟まれるのは子
       子は多数持てる。
   例:<Report />
       <Report></Report> の省略記法
       子要素を持たない時に有用。
XAML文法の基本
   例:<Page Url="http://www.sfc.keio.ac.jp/"></Page>
       PageのプロパティURLにhttp://www.sfc.keio.ac.jp/を代入
   例:<Page>
        <Page.Url>http://www.sfc.keio.ac.jp</Page.Url>
    </Page>
       上と同じこと。主に文字列にならないものを入力するときに使う。Treeなど。
   例:<Page>
        <Page.PreTree>
          <AppendText Header="http://"></AppendText>
        </Page.PreTree>
    </Page>
       プロパティPreTreeにTreeを代入している。
XAML文法の基本
   <Data
         xmlns="clr-namespace:Rawler.Tool;assembly=Rawler“
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
      <Page > </Page>
   </Data>

   Xmlns は決まり文句。触ってはいけない。
   必ずXmlnsがツリーの根っこ(Root)になくてはいけない。
       Dataがツリーの根っこでなければならない理由はないが、便利だからそうし
        ているだけ。
   新たな追加機能を使うときに使う。
       どのDLLのどの名前空間を使うかを指定している。
       今のところ特にないので、この決まり文句で大丈夫
   以降は、これがRootにあることを前提とします。(長くなるので)
Rawler基本(Reportを使おう)
   タグで囲まれたところにはTextがある。
     空っぽのものもあります。Dataなど。
   そのテキストを見るには<Report></Report> を使う
   例:<Page Url="http://www.sfc.keio.ac.jp/">
        <Report></Report>
     </Page>
       指定したURLのページを読み込んだPageにはHTMLがどっさり入っている。
   例:<Page Url="http://www.sfc.keio.ac.jp/">
        <Links>
          <Report></Report>
        </Links>
     </Page>
       ページの中のLinkを列挙される。
Rawler基本(テキスト処理の関数の合成)
   例:<Page>
        <Link>
          <AppendText Header="Url:">
             <Report></Report>
          </AppendText>
        </Link>
    </Page>


   AppendTextで文字列の先頭に「Url:」が加えられ、レポートの
    出力に「Url:」が加えられる。
   テキスト処理に、Trim、Replace、TagClearなどがある。
   ツリーの階層を作るとその処理を順番道理やる。
Rawler基本(フィルタ)
   例:<Page>
           <Links LabelFilter=“Next” VisbleType="Tag" >
                <Report></Report>
           </Links>
      </Page>
   リンクタグ(<a>)で囲まれている中に、「Next」を含むものを抽
    出
   VisbleType=“Tag” でリンクタグ全体を表示(<a>もふくむ)
       VisbleType をUrlでUrlを、 Label でLabel を表示
   例:<Page>
         <Links UrlFilter=“www.">
              <Report></Report>
         </Links>
     </Page>
   リンクのURLに、「www.」を含むものを抽出
HTML+CSS
   今のwebページはHtml+CSSの構成で作られている。
       Html=データの構造
       CSS=デザイン(みため)
   だいたいのページではCSSは別ファイルで定義され、
    タグのClassでそれを呼び出している。
       例:<div class="main entry-content“></div>
       なので、タグ名とclass名を指定すれば、そこの部分が取
        得できる。
           例の場合 タグ=div class名= main entry-content
   Webページのソースコードの見方
       Chrome 右クリック→「要素の検証」でみれる
       HTMLの中の法則をみつけよう。
Rawler基本(タグの絞り込み)
   例:<Page>
      <Tags Tag="div" ClassName="main entry-content">
        <Report/>
      </Tags>
    </Page>
   HTML「<div class=“main entry-content“></div>」で囲まれたところ
    を取得する。複数あるときは複数。
   Tags→Tagsで絞り込むと、範囲を指定した中で、さらに範囲を指定
    することになり、安全に取得できる。
Rawler基本(ページング)
    <Page>
            (データ取得処理)
      <Links LabelFilter="次へ">
        <NextPage></NextPage>
      </Links>
    </Page>


   「次へ」のリンクをクリックして、次のページでも同じデータ取得
    処理をするための命令。
   Linksで該当部分のURLを取得
   NextPageでそれをPageに伝えている。
Rawler基本(データの書き込み)
       <Data>
         <Page>
            <Links>
              <DataWrite Attribute="URL"></DataWrite>
            </Links>
         </Page>
       </Data>


   リンクのURLをDataにURLという情報をつけて書き込む。
   DataViewボタンを押すとDataの中が見れる。
       ただし、横に長いものになる。(カンマ区切り)
Rawler基本(データの書き込み)
       <Data>
         <Page>
            <Links>
              <DataWrite Attribute="URL"></DataWrite>
                  <NextDataRow/>
           </Links>
         </Page>
       </Data>


   リンクのURLをDataにURLという情報をつけて書き込む。
   <NextDataRow/>で毎回改行される。
   DataViewボタンを押すとDataの中が見れる。
       縦に長いものになる。
Rawler基本(前処理機能)
    <Tags Tag="div" ClassName="Comment">
      <TagClear>
         <Trim>
           <Replace OldText="XXXXX" NewText="YYYYY">
              <DataWrite Attribute="data"></DataWrite>
           </Replace>
         </Trim>
       </TagClear>
    </Tags>

   必要な処理の連鎖を作ると階層が深くなってしまう。
   可読性が悪くなってしまう。
   折りたたみ機能が上手に機能しない!
Rawler基本(前処理機能)
       <Tags Tag="div" ClassName="Comment">
          <DataWrite Attribute="data">
            <DataWrite.PreTree>
              <TagClear>
                <Trim>
                   <Replace OldText="XXXXX" NewText="YYYYY">
                   </Replace>
                </Trim>
              </TagClear>
            </DataWrite.PreTree>
          </DataWrite>
       </Tags>

   前のページと同じことをPreTreeをつかいやっている。PreTreeは前にやる処理。
       一番底の結果が使われる。(ここでは、 Replace の結果)
   PreTreeは折りたためるので、可読性がよくなる。
   単数を返すものしかこれは使用できません。
Rawler基本(クエリー機能)
      <Links >
         <Links.Query>
           <QueryDistinct>
             <QueryOrderBy></QueryOrderBy>
                </QueryDistinct>
        </Links.Query>
        <Report></Report>
      </Links>


   複数のテキストを返すものは、複数返すものを制御するクエリーが
    使える。
   クエリも連続して使うことが可能。
   例は、 QueryDistinctで重複を削除して、 QueryOrderByでソートし
    ている。
Rawler基本(クエリー機能)
        <Links >
           <Links.Query>
             <QueryFirst></QueryFirst>
           </Links.Query>
           <Report></Report>
        </Links>


   複数取ってくるとして、その複数の中から、何番目のも
    のを取ってくるかを指定もできる。
   QueryFirstで一番初めに出てくるものだけになる。
       QueryLast で一番最後、<QueryElementAt Index=“2”/> で上
        から3番目(0から始めるので)を指定できる。
       他にもQuerySkip,QueryTakeで指定数、飛ばす(skip)、取っ
        てくる(take)ことができる。
       ただしTagsは逆順なので、直します・・・。
ファイルへの出力
   Dataの直下にFileSaveを置く

   <Data
          xmlns="clr-namespace:Rawler.Tool;assembly=Rawler“
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
      < FileSave ExtendFilter=".tsv" >
                (処理略)
       </ FileSave >
   </Data>


   FileSaveはDataの拡張版。DataWriteとNextDataRowの命令を
    受け付ける。
   実行時、 FileNameプロパティの指定がないと、ダイアログが
    開きファイル名を尋ねられる。
   ファイルへの書き込みはNextDataRowの発動時
ファイルからの入力
   <TsvReadLines >
       <GetTsvValue ColumnName="Url">
             TsvファイルのUrl列のもの情報が入る。
       </GetTsvValue>
   </TsvReadLines>


   Tsvファイルとはタブ区切りのテキストファイルのこと。
   TsvReadLinesでTsvファイルを一行ずつ読み込む。
       実行時、 FileNameプロパティの指定がないと、ダイアログが開きファイル名
        を尋ねられる。
   GetTsvValueで一行分のデータの指定の列の情報を取る。
   FileSaveで作られるファイルはTsvファイルなので、FileSaveで作ら
    れたファイルを読み込むのにも使える。

Rawler基本

  • 1.
  • 2.
    XAML文法の基本  例:<Page></Page>  タグで囲まれているのが一つの塊。  必ず</***>というように閉じる。  例:<Page>  <Report></Report>  </Page>  タグで挟まれるのは子  子は多数持てる。  例:<Report />  <Report></Report> の省略記法  子要素を持たない時に有用。
  • 3.
    XAML文法の基本  例:<Page Url="http://www.sfc.keio.ac.jp/"></Page>  PageのプロパティURLにhttp://www.sfc.keio.ac.jp/を代入  例:<Page>  <Page.Url>http://www.sfc.keio.ac.jp</Page.Url>  </Page>  上と同じこと。主に文字列にならないものを入力するときに使う。Treeなど。  例:<Page>  <Page.PreTree>  <AppendText Header="http://"></AppendText>  </Page.PreTree>  </Page>  プロパティPreTreeにTreeを代入している。
  • 4.
    XAML文法の基本  <Data  xmlns="clr-namespace:Rawler.Tool;assembly=Rawler“  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >  <Page > </Page>  </Data>  Xmlns は決まり文句。触ってはいけない。  必ずXmlnsがツリーの根っこ(Root)になくてはいけない。  Dataがツリーの根っこでなければならない理由はないが、便利だからそうし ているだけ。  新たな追加機能を使うときに使う。  どのDLLのどの名前空間を使うかを指定している。  今のところ特にないので、この決まり文句で大丈夫  以降は、これがRootにあることを前提とします。(長くなるので)
  • 5.
    Rawler基本(Reportを使おう)  タグで囲まれたところにはTextがある。  空っぽのものもあります。Dataなど。  そのテキストを見るには<Report></Report> を使う  例:<Page Url="http://www.sfc.keio.ac.jp/">  <Report></Report>  </Page>  指定したURLのページを読み込んだPageにはHTMLがどっさり入っている。  例:<Page Url="http://www.sfc.keio.ac.jp/">  <Links>  <Report></Report>  </Links>  </Page>  ページの中のLinkを列挙される。
  • 6.
    Rawler基本(テキスト処理の関数の合成)  例:<Page>  <Link>  <AppendText Header="Url:">  <Report></Report>  </AppendText>  </Link>  </Page>  AppendTextで文字列の先頭に「Url:」が加えられ、レポートの 出力に「Url:」が加えられる。  テキスト処理に、Trim、Replace、TagClearなどがある。  ツリーの階層を作るとその処理を順番道理やる。
  • 7.
    Rawler基本(フィルタ)  例:<Page>  <Links LabelFilter=“Next” VisbleType="Tag" >  <Report></Report>  </Links>  </Page>  リンクタグ(<a>)で囲まれている中に、「Next」を含むものを抽 出  VisbleType=“Tag” でリンクタグ全体を表示(<a>もふくむ)  VisbleType をUrlでUrlを、 Label でLabel を表示  例:<Page>  <Links UrlFilter=“www.">  <Report></Report>  </Links>  </Page>  リンクのURLに、「www.」を含むものを抽出
  • 8.
    HTML+CSS  今のwebページはHtml+CSSの構成で作られている。  Html=データの構造  CSS=デザイン(みため)  だいたいのページではCSSは別ファイルで定義され、 タグのClassでそれを呼び出している。  例:<div class="main entry-content“></div>  なので、タグ名とclass名を指定すれば、そこの部分が取 得できる。  例の場合 タグ=div class名= main entry-content  Webページのソースコードの見方  Chrome 右クリック→「要素の検証」でみれる  HTMLの中の法則をみつけよう。
  • 9.
    Rawler基本(タグの絞り込み)  例:<Page>  <Tags Tag="div" ClassName="main entry-content">  <Report/>  </Tags>  </Page>  HTML「<div class=“main entry-content“></div>」で囲まれたところ を取得する。複数あるときは複数。  Tags→Tagsで絞り込むと、範囲を指定した中で、さらに範囲を指定 することになり、安全に取得できる。
  • 10.
    Rawler基本(ページング)  <Page>  (データ取得処理)  <Links LabelFilter="次へ">  <NextPage></NextPage>  </Links>  </Page>  「次へ」のリンクをクリックして、次のページでも同じデータ取得 処理をするための命令。  Linksで該当部分のURLを取得  NextPageでそれをPageに伝えている。
  • 11.
    Rawler基本(データの書き込み)  <Data>  <Page>  <Links>  <DataWrite Attribute="URL"></DataWrite>  </Links>  </Page>  </Data>  リンクのURLをDataにURLという情報をつけて書き込む。  DataViewボタンを押すとDataの中が見れる。  ただし、横に長いものになる。(カンマ区切り)
  • 12.
    Rawler基本(データの書き込み)  <Data>  <Page>  <Links>  <DataWrite Attribute="URL"></DataWrite>  <NextDataRow/>  </Links>  </Page>  </Data>  リンクのURLをDataにURLという情報をつけて書き込む。  <NextDataRow/>で毎回改行される。  DataViewボタンを押すとDataの中が見れる。  縦に長いものになる。
  • 13.
    Rawler基本(前処理機能)  <Tags Tag="div" ClassName="Comment">  <TagClear>  <Trim>  <Replace OldText="XXXXX" NewText="YYYYY">  <DataWrite Attribute="data"></DataWrite>  </Replace>  </Trim>  </TagClear>  </Tags>  必要な処理の連鎖を作ると階層が深くなってしまう。  可読性が悪くなってしまう。  折りたたみ機能が上手に機能しない!
  • 14.
    Rawler基本(前処理機能)  <Tags Tag="div" ClassName="Comment">  <DataWrite Attribute="data">  <DataWrite.PreTree>  <TagClear>  <Trim>  <Replace OldText="XXXXX" NewText="YYYYY">  </Replace>  </Trim>  </TagClear>  </DataWrite.PreTree>  </DataWrite>  </Tags>  前のページと同じことをPreTreeをつかいやっている。PreTreeは前にやる処理。  一番底の結果が使われる。(ここでは、 Replace の結果)  PreTreeは折りたためるので、可読性がよくなる。  単数を返すものしかこれは使用できません。
  • 15.
    Rawler基本(クエリー機能)  <Links >  <Links.Query>  <QueryDistinct>  <QueryOrderBy></QueryOrderBy>  </QueryDistinct>  </Links.Query>  <Report></Report>  </Links>  複数のテキストを返すものは、複数返すものを制御するクエリーが 使える。  クエリも連続して使うことが可能。  例は、 QueryDistinctで重複を削除して、 QueryOrderByでソートし ている。
  • 16.
    Rawler基本(クエリー機能)  <Links >  <Links.Query>  <QueryFirst></QueryFirst>  </Links.Query>  <Report></Report>  </Links>  複数取ってくるとして、その複数の中から、何番目のも のを取ってくるかを指定もできる。  QueryFirstで一番初めに出てくるものだけになる。  QueryLast で一番最後、<QueryElementAt Index=“2”/> で上 から3番目(0から始めるので)を指定できる。  他にもQuerySkip,QueryTakeで指定数、飛ばす(skip)、取っ てくる(take)ことができる。  ただしTagsは逆順なので、直します・・・。
  • 17.
    ファイルへの出力  Dataの直下にFileSaveを置く  <Data  xmlns="clr-namespace:Rawler.Tool;assembly=Rawler“  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >  < FileSave ExtendFilter=".tsv" >  (処理略)  </ FileSave >  </Data>  FileSaveはDataの拡張版。DataWriteとNextDataRowの命令を 受け付ける。  実行時、 FileNameプロパティの指定がないと、ダイアログが 開きファイル名を尋ねられる。  ファイルへの書き込みはNextDataRowの発動時
  • 18.
    ファイルからの入力  <TsvReadLines >  <GetTsvValue ColumnName="Url">  TsvファイルのUrl列のもの情報が入る。  </GetTsvValue>  </TsvReadLines>  Tsvファイルとはタブ区切りのテキストファイルのこと。  TsvReadLinesでTsvファイルを一行ずつ読み込む。  実行時、 FileNameプロパティの指定がないと、ダイアログが開きファイル名 を尋ねられる。  GetTsvValueで一行分のデータの指定の列の情報を取る。  FileSaveで作られるファイルはTsvファイルなので、FileSaveで作ら れたファイルを読み込むのにも使える。