2015-10-08 23 views
1

我想用一些Python網絡爬蟲從網站上下載大約3000個PDF文件。但是,這些PDF的URL由JavaScript函數生成。所以,我想知道是否有任何教程如何實現這一目標?用於JavaScript的Python網絡爬蟲生成的URL

例如,鏈接到Alberto European Hairspray (Aerosol) - All Variants的URL將在單擊onclick="javascript:__doPostBack('ctl00$placeBody$gridView$gridView','DocumentCenter.aspx?did={0}$0&#39後生成。 所以問題是如何讓網絡爬蟲獲得計算出的URL。

function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
<tbody> 
    <tr> 
     <td> 
      <input type="image" src="App_Graphics/PDFDocument.gif" alt="MSDS" onclick="javascript:__doPostBack(&#39;ctl00$placeBody$gridView$gridView&#39;,&#39;DocumentCenter.aspx?did={0}$0&#39;);return false;" /> 
     </td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$placeBody$gridView$gridView&#39;,&#39;MSDSDetail.aspx?did={0}$0&#39;)">Alberto European Hairspray (Aerosol) - All Variants</a> 
     </td> 
     <td>Unilever PLC</td> 
     <td>8131-01</td> 
    </tr> 
    <tr class="row-alternate"> 
     <td> 
      <input type="image" src="App_Graphics/PDFDocument.gif" alt="MSDS" onclick="javascript:__doPostBack(&#39;ctl00$placeBody$gridView$gridView&#39;,&#39;DocumentCenter.aspx?did={0}$1&#39;);return false;" /> 
     </td> 
     <td><a href="javascript:__doPostBack(&#39;ctl00$placeBody$gridView$gridView&#39;,&#39;MSDSDetail.aspx?did={0}$1&#39;)">Alberto European Mousse (Aerosol) - All Variants</a> 
     </td> 
     <td>Unilever PLC</td> 
     <td>8132-01</td> 
    </tr> 
</tbody> 

回答

1

你不能。使用JavaScript解釋器(例如,SpiderMonkey)來執行代碼,然後繼續進行HTML解析。使用Qt的WebKit也是一個好方法,但可能會更慢。

+0

感謝您指點我這些來源! –

+0

@ tao.hong不客氣。我有同樣的問題,我知道這有點令人失望:P – cdonts

1

另一種選擇是,您可以使用硒到execute js並獲得計算的URL。