2013-10-22 87 views
0

我想從this website下載所有文件進行備份和鏡像,但是我不知道如何正確解析JavaScript鏈接。從ASP網站刮下JavaScript下載鏈接

我需要在命名文件夾中以相同的方式組織所有下載。例如,在第一個文件夾中,我將有一個名爲「DAP-1150」的文件夾,裏面有一個名爲「DAP-1150 A1 FW v1.10」的文件夾,其中包含文件「DAP1150A1_FW110b04_FOSS.zip」等等文件。我嘗試在Python中使用beautifulsoup,但它似乎無法正確處理ASP鏈接。

+0

我認爲Selenium可能是矯枉過正的。我注意到,一旦你點擊了一個鏈接,它會進行POST提交(因爲無需詢問用戶就無法刷新結果頁面)。因此,找出點擊鏈接的方法 - 它可能會在表單中插入一個值並提交它。你所需要做的就是模仿你的模仿,使用scraped鏈接找出你需要的輸入。 – halfer

+0

是的,我看起來像派皮是要走的路,我需要爲下載創建文件夾結構,並生成完整的下載列表和路徑,以便在發生更改時排隊並更新。 – jhilliar

+0

我一直在嘗試一些東西,但我仍然無法得到任何工作,這個網站看起來很奇怪。我想我需要某種可以正確掛接到jquery的刮板,但我不知道如何做到這一點。我可以使用時間線功能追蹤所有使用時間線功能進行的調用,但我不知道如何將其調整爲scrapy或類似的方式。 – jhilliar

回答

0

當你使用Javascript奮鬥鏈接,你可以給硒一試:http://selenium-python.readthedocs.org/en/latest/getting-started.html

from selenium import webdriver 
import time 

driver = webdriver.Firefox() 
driver.get("http://www.python.org") 
time.sleep(3) # Give your Selenium some time to load the page 
link_elements = driver.find_elements_by_tag_name('a') 
links = [link.get_attribute('href') for link in links] 

您可以使用的鏈接,並將其傳遞給urllib2相應下載。 如果你需要比一個腳本更多,我可以推薦你Scrapy的組合和硒: selenium with scrapy for dynamic page

0

下面是它在做什麼。我只是使用Firefox中的標準網絡檢查器來快照POST操作。請記住,就像my other answer我指出的那樣,這不是一個特別精心編寫的網站 - JS/POST根本不應該被使用。

首先,這裏的JS - 這是非常簡單的:

function oMd(pModel_,sModel_){ 
obj=document.form1; 
obj.ModelCategory_.value=pModel_; 
obj.ModelSno_.value=sModel_; 
obj.Model_Sno.value=''; 
obj.ModelVer.value=''; 
obj.action='downloads2008detail.asp'; 
obj.submit(); 
} 

寫入到這些領域:

<input type=hidden name=ModelCategory_ value=''> 
<input type=hidden name=ModelSno_ value=''> 

所以,你只需要一個POST形式,靶向這個網址:

http://tsd.dlink.com.tw/downloads2008detail.asp 

下面是FF網絡分析儀的一組示例數據。這裏只有兩個項目,你需要改變 - 一把抓起JS鏈接 - 你可以抓住那些普通刮:

  • 輸入= OK
  • ModelCategory = 0
  • ModelSno = 0
  • ModelCategory_ = DAP
  • ModelSno_ = 1150
  • Model_Sno =
  • ModelVer =
  • sel_PageNo = 1
  • OS = GPL

你會通過實驗,不是所有的人都需要的也許可以找到。我曾嘗試在瀏覽器中使用GET,但它看起來像目標頁面堅持POST。

不要忘記在點擊和提交之間在刮板內留下相當多的時間,因爲每個點都代表遠程服務器上的點擊;我建議5秒,模仿人類的延遲。如果你這麼做的太快了 - 如果你連接的很好,這一切都可能發生 - 遠程方可能會認爲你在做它,並可能會阻止你的IP。記住刮擦的座右銘:做一個好機器人!

+0

從scrapy shell使用hxs.select(「// strong/a/@ href」)。extract()我似乎能夠獲得單個頁面所需的信息。然而,相同的路徑似乎不適用於刮頁碼。爲此我得到了「// tr [21]/td/table/tbody/tr/td/a」,但似乎scrapy根本不解釋「tbody」,還有另外一種方法可以找到正確的xpath scrapy? – jhilliar

+0

只是想通了,看起來像我可以修改這樣的頁面請求http://tsd.dlink.com.tw/downloads2008list.asp?t=1&OS=GPL&SourceType=download&PageNo=3增加頁面 – jhilliar

+0

Er ...別客氣! – halfer