So-net無料ブログ作成

Twitterまとめ投稿 2017/04/29 [Twitter]


コメント(0) 

WindowsのExplorerの検索が愚直に探してくれなくなった。 [ソフトウェア]

Bash on Windowsでwgetで取得しているからかもしれないけれど、Windows10 のExplorerでファイルの検索ができなくなった。ごくたまにインデックスがないよと言ってくれて、そこをクリックして作成しているのだけれども、どうにもこうにも検索ができない。あるはずのファイルが見えていないのだ。Explorerで直接見に行くと検索対象のファイルが普通にあるのに、検索すると見えない。

Windowsの検索はディレクトリを深く再帰的に探る場合は、インデックスを使って検索をかけるようだ。だから、本来あるファイルでもインデックスに登録されていない場合は、検索結果に出てこない。基本的に愚直にファイルディレクトリをさらって見つけてきてくれるという事をしてくれなくなっているようだ。でも、ちょっと前はできていたのでインデックスを作るサービスがなんらかの問題があって動いてない可能性は高い。

これでは網羅的過ぎてピンポイントにできないばかりか時間がかかるか、場合によっては全く効かないみたいだ。
https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=018181

WindowsのGUIは信用ならないところがある。なわけで、管理者権限でコマンドライン。
https://answers.microsoft.com/ja-jp/windows/forum/windows_10-win_cortana/windows10/95283415-fe84-4f82-b36a-5b3fce9bce3c

dism /online /cleanup-image /restorehealth

案外あっさり終わる。これでいいのだろうか。あ~やっぱり結構時間がかかりそう。

sfc /scannow

GUIだと裏で動ているんだか動いてないんだかわからないから、進捗が出るのはいいよね。というかGUIでも出すべきなんだけど、ただ単にマルチタスクにかこつけて進行状況を出さないという悪しき風習になっているのだろうね。まぁ色々なことをみんな裏でやってくれている分楽できるんだけど、一度面倒が起こるとは快適に使えなくなるからな、今回みたいに。

一応ゆっくりだけど検索に反映されるようになったみたい。フラッシュメモリだから動作がよく分からんのだけれども、今まで示されなかったファイルが検索で見えるようになったようだ。ただ、全部表示されるまで時間が結構かかるみたい。かなりダラダラと検索結果が増えていく。それが途中なのかどうなのかが分からないというのがとても気持ち悪い。何というかこれがあまり普通の使い方じゃないにしても、OSの機能としてはパッと表示されなくてもそれが不完全なものであることを示すか、完全に終わったことを示すシグナルを出してくれないと使いにくくって仕方ないよなぁ。

コメント(0) 
共通テーマ:パソコン・インターネット

Twitterまとめ投稿 2017/04/28 [Twitter]


コメント(0) 

Twitterまとめ投稿 2017/04/27 [Twitter]


コメント(0) 

Twitterまとめ投稿 2017/04/26 [Twitter]


コメント(0) 

Twitterまとめ投稿 2017/04/25 [Twitter]


コメント(0) 

Twitterまとめ投稿 2017/04/23 [Twitter]


コメント(0) 

golangでwget -rで取りにくい画像を取りにいくものを作ったり [プログラミング]

wget -rでそのサイトを網羅的に引っこ抜く方法はほうぼうで出ていると思います。Windows10ではBash on Windowsですぐにwgetを叩けるようになっているので、サイトをもぎ取ってくるには楽チンな方法だったりします。実際、私もいろいろな方法でエロ画像をとってきたわけですが、取れないものも出てくるわけです。取れないわけじゃないんだけど、wgetでやるのは面倒なパターン。

wget -rで基本有効なのは同じサイトのHTMLや画像などになります。だからwww.hogehoge.comとかあった場合、wgetで再帰的にディレクトリを辿れても、画像がpic.hogehoge.comとかにあった場合、何も指定してあげなかったら取れないわけです。-Hオプションで他のドメインも許してあげて、-Dでその範囲のサーバを指定してあげるみたいにできるとは思いますが、pic1.hogehoge.com, pic2.hogehoge.comとか出てきたら面倒で、大体は網羅的に取れません(いきなりpic7.hogehoge.comとかでてくるかもしれないから)。

そんなわけで、ドメインが違ってもその画像だけ取ってくるものをGolangで作ってみました。とはいえ、参考のサイトのを取れただけで、みんな取れるようになったわけじゃないので、とりあえずはURLを放り込んでaタグでリンクされている画像については取れるものもあるという程度です。同じドメインにある画像も取れるようにしたかったんだけど、それはwgetでやってもらうことにして、違うドメインに貼ってあるリンクだけでも取れるようにしました。

package main

import (
    "github.com/PuerkitoBio/goquery"
    "fmt"
    "os"
    "path"
    "net/http"
    "io/ioutil"
    "strings"
    "net/url"
    "strconv"
)

func abspath(rpath string, urlstr string)(string){
  if(rpath[0] == '/'){
    u, _ := url.Parse(urlstr)
    return u.Scheme + "://" + u.Host + rpath
  }else if(strings.Contains(rpath, "http://")||strings.Contains(rpath, "https://")) {
    return rpath
  }else{
    dir, _ := path.Split(urlstr)
    return path.Join(dir, urlstr)
  }
}

func getfile( url string, dir string) {
  resp, _ := http.Get(url)
  defer resp.Body.Close()

  byteArray, _ := ioutil.ReadAll(resp.Body)
  ioutil.WriteFile("./" + dir + "/" + path.Base(url), byteArray, os.ModePerm)
}

func makedir()(string) {
    i := 0
    for ; i<10000; i++{
      _, err := os.Stat("./" + strconv.Itoa(i))
      if err == nil {
        continue
      }else{
        os.Mkdir(strconv.Itoa(i), 0777)
        break
      }
    }
    fmt.Println("mkdir:" + strconv.Itoa(i))
    return strconv.Itoa(i)
}

func main() {
    geturl := os.Args[1]
    fmt.Println(geturl)
    doc, err := goquery.NewDocument(geturl)
    if err != nil {
      fmt.Print("url scarapping failed")
      return
    }
    dirnum := makedir()
    doc.Find("a").Each(func(_ int, s *goquery.Selection) {
        dir, _ := s.Attr("href")
        if (strings.Contains(dir, ".jpg")||strings.Contains(dir,".png")||strings.Contains(dir,".gif")){
          fmt.Println(dir)
          absurl := abspath(dir, geturl)
          fmt.Println("absolute: " +absurl)
          getfile(absurl, dirnum)
        }
    })
}


もちろん適当に実験しながらだったんで、再帰的には動きません。あしからず。あとエラー処理もまともにしていません。コンパイルが通るか通らないかだけで、インデントや変数の名前とかも適当です。

使い方は$GOPATHを適当に設定して
go get github.com/PuerkitoBio/goquery
してあげて、上のソースをコンパイルするかgo runするかします。
引数に取りたいページのURLを取ってあげるだけでいいはずです。

実際動かすと、同ディレクトリに0から順番にフォルダができるので、そこに画像が格納されます。同じディレクトリでもよかったんだけど、1.jpg, 2.jpg…とかのぶち当たりそうな名前を処理するのが面倒だったので、ディレクトリを作ってそこに入れました。本人が使っての感想ですが、ちまちま取りに行かなくて済むのは楽です。ただ再帰的には動いてくれないので、サイト全部とかは無理です。本当はそこまでやりたいのだけれども、いろいろ処理を加えないといけないので、wget -rで取りにくいとわかっているところだけを取れるようにしました。

goqueryで楽できたけど、もう少し改良の余地はあるなぁと思いつつ、今回は終わり。

タグ:Golang
コメント(0) 
共通テーマ:パソコン・インターネット

Twitterまとめ投稿 2017/04/21 [Twitter]


コメント(0) 

Twitterまとめ投稿 2017/04/20 [Twitter]


コメント(0)