2016-06-28 4 views
0

だから、ランダムな順序でScrapyダウンロード画像のように見えることから、私は2つの方法のいずれかのいずれかで画像をソートする方法を見つけるためにしようとしてきた:スクラップでダウンロードしたアイテムを注文するには?

  1. ダウンロードURLが
  2. を掻き取ったために、
  3. ソート彼らは にURLリストを来た順によって ファイル(おそらくメタデータを使用して?)

私が最も効率的な方法も可能でこれを行うしたいと思いますが、今の私ができます」いずれの方法を使ってどのように行うかを理解する。おそらくSchedulerを変更してみましたが、これを変更するオプションはないと思います。

答えて

1

ページによっては機能しない場合もありますが、lxmlを使用してHTMLを解析し、イメージ用に独自のツリー構造を構築することができます。あなたはHTMLツリーをたどって、画像のレベルを見つけ出し、自分のツリーを構築します。あなたはこのページを持っているふりをします:

|x| |x| |x| 
|x| |x| |x| 
|x| |x| |x| 

ここで、各xは画像に対応しています。あなたはlxmlのによって作成されたツリーを歩くと、画像への深さとその親を割り当てた場合、解析されたHTML文書の構造は、あなたがあなたの画像の順番を伝えることができ、この構造を作成することができ、

<HTML> 
    <Table>  
      <Column 1> 
       Pic 1 
       Pic 2 
       Pic 3 

      <Column 2> 
       Pic 1 
       Pic 2 
       Pic 3 

      <Column 3> 
       Pic 1 
       Pic 2 
       Pic 3 
    </Table> 
</HTML> 

のようなものが考えられます。

Depth 1  Column 1   Column 2   Column 3 
Depth 2 Pic  1     1     1    
Depth 3 Pic  2     2     2   
Depth 4 Pic  3     3     3  

これは単なるアイデアであり、整然としたやフォーマットが不適切なウェブページではうまく機能しません。


この問題もありました。素早く回避するには、リンクをスクラップするようにキューに入れた後(基本的にメイン関数が呼び出されたときや、より深く進む要求を返すとき)、ファイルへのリンクを書き込んで、順番に並べ替えます掻き集める

申し訳ありませんが、今では自宅でコードを使用してマシンにアクセスできません。したがって、あなたは解析される関数を持っています。私はあなたがリンクに従うと仮定しています。 私はいくつかの擬似コード

def parse(self,response): 
    currentlink = response.url 
    uniqueid = (a sequential number) #callerid refers to starting link 

    with open("mylog.txt","a") as f: 
     f.write(currentlink+"\t"+str(uniqueid) 
    (whatever your logic for your start link) 
    (logic for following links, something something callback="otherfn") 
    (add uniqueid to your request.meta) 
    return request 


def otherfn(self,response): 
    take current link, take the unique id you created in parse 
    with open("mylog.txt","a") as f: 
     f.write(picturelink+"\t"+str(uniqueid)) 

これは大まかなアウトラインですが書きますが、これには多くのバリエーションがあります。私はこれが最適な解決策であるかどうかは分かりませんが、実際に実行時間を取らず、たくさんの画像/リンクを通過していないと仮定すると、あまりスペースをとらないでしょう。あなたの本当の順序伝えるために2つのキーを持つ

def parse(self,response): 
    currentlink = response.url 
    callerid = (a sequential number) #callerid refers to starting link 
    sequentialid = 1 

    with open("mylog.txt","a") as f: 
     f.write(currentlink+"\t"+str(uniqueid) 
    (whatever your logic for your start link) 
    (logic for following links, assign each link you follow a sequential id that tells you the order of the request calls. callback="otherfn") 
    (add callerid,sequentialid to your request.meta) 
    return request 


def otherfn(self,response): 
    take current link, take the unique id you created in parse 
    with open("mylog.txt","a") as f: 
     f.write(picturelink \t %s \t %s %(uniqueid,sequentialid)) 
+0

は、私はいくつかのコードを取得していただけますか?あなたが何を言っているのかは分かりません。 – dtgee

+0

おおよその例。他のリンクから参照されるuniqueidを行うことができます(順番に処理されます)。また、訪問の順番を確認するための別の番号と同様に、固有のIDを作成することもできます。それを今追加する.. – Jason

+0

私はここで少し混乱しています。これはあなたのイメージがあるはずのリンクを含むファイルを書き込むだけですか?それとも、実際に自動的に画像を並べ替えるのですか?申し訳ありませんが、詳細なコードなしでここで何をしているのかよく分かりません。 – dtgee

関連する問題