所以,因爲它看起來像Scrapy下載圖像隨機順序,我一直試圖找到一種方法,在圖像排序以下兩種方法之一:如何訂購scrapy下載的物品?
- 下載順序其中的URL被刮掉
- 排序 文件(比如用元數據?),由他們在 來源網址列表中的順序
我想做到這一點的最有效的方式,但現在我可以」弄清楚如何使用這兩種方法來做到這一點。我看着可能修改Scheduler
,但我不認爲有任何改變這一點的選擇。
所以,因爲它看起來像Scrapy下載圖像隨機順序,我一直試圖找到一種方法,在圖像排序以下兩種方法之一:如何訂購scrapy下載的物品?
我想做到這一點的最有效的方式,但現在我可以」弄清楚如何使用這兩種方法來做到這一點。我看着可能修改Scheduler
,但我不認爲有任何改變這一點的選擇。
一個解決方案可能會或可能不會取決於頁面將是你解析HTML使用lxml和建立你自己的樹形結構的圖像。您遍歷HTML樹並查找圖像的級別並從中構建自己的樹。假設你有這個頁面:
|x| |x| |x|
|x| |x| |x|
|x| |x| |x|
其中每個x對應一個圖像。解析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>
如果你走通過LXML創建的樹和分配深處的圖像和他們的父母,你可以創建這個結構可以告訴你圖片的順序:
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))
這是一個粗線條的,但也有這麼多的變化。我不知道這是否是最佳解決方案,但它並不真正需要任何運行時間,並假設您沒有經歷大量圖像/鏈接,不會佔用太多空間。
有兩個鍵來告訴你真正的順序:
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以及另一個號碼,以確保您的訪問順序。現在補充說.. – Jason
我在這裏有點困惑。這只是寫文件,其中包含您的圖像應該在哪些鏈接?或者它實際上是否自動對圖像自動排序?對不起,我不太瞭解你在這裏做什麼,沒有更詳細的代碼。 – dtgee