2012-06-18 30 views
0

我的工作scrapy如何避免scrapy忽略哈希標籤

我有一個網站與包括散列標籤刮掉,但是當我運行它,scrapy下載忽略哈希標籤

例如響應這是與hash fragments,url="www.example.com/hash-tag.php#user_id-654" 和該請求的響應只有www.example.com/hash-tag.php的網址,但我想刮哈希碎片的網址。

我的代碼如下

class ExampleSpider(BaseSpider): 
    name = "example" 
    domain_name = "www.example.com" 


    def start_requests(self): 
      return Request("www.example.com/hash-tag.php#user_id-654")  


    def parse(self): 
      print response 

結果:

<GET www.example.com/hash-tag.php> 

我怎樣才能做到這一點...... 在此先感謝........... .....

+3

散列標籤如何添加額外信息?散列標籤永遠不會發送到服務器,它們只是瀏覽器端的信息,然後頁面中的任何額外信息就已經存在或者用JavaScript和AJAX加載。 –

+0

@Martijn彼得斯:感謝您的回覆,我意識到他們是瀏覽器端的唯一信息,我會編輯我的問題,如果有必要,但有沒有一種方法在scrapy避免忽略哈希標記,因爲我想實現分頁之一該網站,所以當我點擊頁碼上面的格式(我的意思是包括哈希標籤)的網址生成。所以我想使用該哈希標記,並動態地傳遞值來實現分頁,這是我的意圖,你可以提供給我一種方式,我希望你明白這一點.. –

+0

你在地址欄中看到的東西並不完全相同被髮送到服務器。使用帶有詳細網絡報告工具的瀏覽器(在Chrome中按CTRL-SHIFT-I,點擊網絡,使用目標站點),以便您可以看到來回發送的內容。機會很好,你會發現實際的請求URL與地址欄中的url非常不同;該頁面是由JavaScript動態構建的,但是從後臺獲取的常規資源 – SingleNegationElimination

回答

0

你想要做的事情是不容易的。爲了實現你想要的,你需要一個完整的DOM和JavaScript引擎,即一個(可能是無頭的)瀏覽器。

如果你真的需要它,看看PhantomJS。這是WebKit引擎,但完全沒有頭緒。我不確定scrapy是否可以輕鬆擴展,但是如果您確實想要執行JavaScript(在這種情況下您需要),使用PhantomJS可能是一種可行的方法。

+0

感謝您的回覆,我上面編輯了我的代碼,可以給我一個例子,說明如何在 –

+0

以上。編寫代碼的方式超出了SO的答案範圍。 – ThiefMaster

0

那麼如果你真的需要這些信息,你可以在調用Request之前做一些拆分字符串,然後把這些信息作爲元數據發送。

喜歡的東西

url = "www.example.com/hash-tag.php#user_id-654" 
hash = url.split("#")[1] 

request = Request(url, callback=self.parse_something) 
request.meta['after_hash'] = hash 
yield request 

,然後在解析獲取和使用它像

def parse_something(self, response): 
    hash = response.meta['after_hash'] 

也就是說,如果你只需要井號之後的信息。

+0

我的意思是我試圖在一個網站上實現分頁,網址爲「www.example.com/hash-tag.php#user_id-1第1頁」和www.example.com/hash-tag.php#user_id-2 「對於第2頁等等,所以我已經給這個url在嘗試start_request方法,但它忽略哈希碎片,在這裏我可以實現分頁eigther,如果請求是與包括哈希碎片的URL或通過查看鉻,但我想我們是否可以使scrapy執行URL與哈希標籤或任何其他替代方案來實現這一點........對不起,如果有什麼不對勁....感謝提前 –

+0

,爲什麼你不能只是得到所有數據並自己做分頁,這不是更好的方法。如果你想分頁,你需要自己實現 – iblazevic