ページによっては機能しない場合もありますが、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))
は、私はいくつかのコードを取得していただけますか?あなたが何を言っているのかは分かりません。 – dtgee
おおよその例。他のリンクから参照されるuniqueidを行うことができます(順番に処理されます)。また、訪問の順番を確認するための別の番号と同様に、固有のIDを作成することもできます。それを今追加する.. – Jason
私はここで少し混乱しています。これはあなたのイメージがあるはずのリンクを含むファイルを書き込むだけですか?それとも、実際に自動的に画像を並べ替えるのですか?申し訳ありませんが、詳細なコードなしでここで何をしているのかよく分かりません。 – dtgee