2017-05-28 112 views
0


我想從此網站上抓取數據:Website link
我想從特定日期下載所有PDF文件。
雖然我已經設法從第一頁獲取文件並正確下載它們,但我無法更改日期,因此我可以返回到以前的日期並獲取舊的PDF。
我試過這行:在scrapy外殼中的scrapy.FormRequest.from_response(response,formxpath='//table//td//input[@type="text"]', formdata={'value': "20.05.2017"}, clickdata={'type':'submit'}, method='POST'),但view(response)總是顯示當前日期。

我不確定這是否正確無論如何,我是scrapy的新手,我試圖弄清楚。我認爲該方法是正確的,因爲當我更改日期鏈接不會更改時,所以它應該是POST而不是GET

關於如何讓這個工作的任何想法?
我認爲FormRequest()是最好的選擇,但我沒有在網上看到任何其他的例子,scrapy網站上的文檔對我沒有太大幫助,所以我試圖研究那些涉及登錄憑證的例子,它們都使用了FormRequest.from_response()
謝謝你的時間。使用scrapy更改HTML元素的值

PS:我已經包含了與日期更改有關的HTML代碼段的屏幕截圖。 Screenshot

回答

1

輸入字段名稱是「日期」,而不是「值」:

<form id="dailyFekForm" name="dailyFekForm" action="/idocs-nph/search/dailyFekForm.html" method="post"> 
     <br> 
     <div> 

     </div> 
     <div class="non-printable" style="padding-left:20px;"> 
      <table> 
       <tr> 
        <td style="font-size:100%; color:#3399FF;" align="left" > 
         <table> 
          <tr> 
           <td valign="center" style="font-size:100%; color:#3399FF;" ><b>Ημερομηνία Κυκλοφορίας</b></td> 
           <td> 
            <img title="Επιλέξτε ημερομηνία για ημερήσια κυκλοφορία" border="0" src="/idocs-nph/images/tooltip.gif" > 
           </td> 
          </tr> 
         </table> 
        </td> 
        <td><input id="date" name="date" type="text" value="29.05.2017"/></td> 
        <td><img src="/idocs-nph/images/admin/calendar.gif" id="triggerDate"/></td> 
        <td><input class="save" type="submit" value="Αναζήτηση" name="search" id="search"/></td> 
       </tr> 
      </table> 

你也可以檢查你的瀏覽器將使用其開發工具:http://imgur.com/a/ztDtF(選中「表格數據」在底部)

因此,你可以使用:

scrapy.FormRequest.from_response(response,formdata={'date': "19.05.2017"}) 

樣品使用scrapy外殼,呈現出不同的會話錶行:

$ scrapy shell http://www.et.gr/idocs-nph/search/dailyFekForm.html 
>>> from pprint import pprint 
>>> pprint(response.css('table#result_table tr:not(.prop) td b').xpath('normalize-space()').getall()) 
['ΦΕΚ A 77 - 26.05.2017', 
'ΦΕΚ B 1836 - 25.05.2017', 
'ΦΕΚ B 1837 - 25.05.2017', 
(...) 
'ΦΕΚ Α.Α.Π. 112 - 25.05.2017', 
'ΦΕΚ Α.Α.Π. 113 - 26.05.2017', 
'ΦΕΚ Α.Α.Π. 114 - 26.05.2017', 
'ΦΕΚ Α.Α.Π. 115 - 26.05.2017'] 
>>> fetch(scrapy.FormRequest.from_response(response,formdata={'date': "19.05.2017"})) 
2017-05-29 14:42:50 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://www.et.gr/idocs-nph/search/dailyFekForm.html> (referer: None) ['partial'] 
>>> pprint(response.css('table#result_table tr:not(.prop) td b').xpath('normalize-space()').getall()) 
['ΦΕΚ A 72 - 19.05.2017', 
'ΦΕΚ A 73 - 19.05.2017', 
'ΦΕΚ A 74 - 19.05.2017', 
(...) 
'ΦΕΚ Υ.Ο.Δ.Δ. 234 - 18.05.2017', 
'ΦΕΚ Α.Α.Π. 105 - 16.05.2017', 
'ΦΕΚ Α.Α.Π. 108 - 16.05.2017'] 
>>> fetch(scrapy.FormRequest.from_response(response,formdata={'date': "16.05.2017"})) 
2017-05-29 14:45:53 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://www.et.gr/idocs-nph/search/dailyFekForm.html> (referer: None) ['partial'] 
>>> pprint(response.css('table#result_table tr:not(.prop) td b').xpath('normalize-space()').getall()) 
['ΦΕΚ A 69 - 16.05.2017', 
'ΦΕΚ B 1638 - 15.05.2017', 
'ΦΕΚ B 1639 - 15.05.2017', 
(...) 
'ΦΕΚ Υ.Ο.Δ.Δ. 228 - 16.05.2017', 
'ΦΕΚ Υ.Ο.Δ.Δ. 229 - 16.05.2017', 
'ΦΕΚ Α.Α.Π. 102 - 15.05.2017'] 
>>> 
+0

非常感謝您的時間。這對你有用嗎?我已經在Scrapy shell中試過了,當我使用視圖(響應)時,它會返回相同的日期。我不應該看到改變的嗎? –

+0

它適用於我。看到我更新的答案。 –

+0

沒有使用抓取..我覺得自己像個白癡,現在我一直在尋找這個錯誤3天。非常感謝你,真的很感激。 –