2012-12-31 59 views
2

我正在使用this scrapy code snippet來呈現我想從中抓取數據的網站的JavaScript代碼。該網站是一個視頻搜索引擎,搜索結果由javascript呈現。我想要關注下一頁鏈接並刪除整個搜索到的項目。以下是我的蜘蛛代碼:爲什麼我的scrapy下載中間件不能正確渲染javascript?

class VideoSpider(BaseSpider): 
    name = "VideoSpider" 
    allowed_domains = ["domain.com"] 
    start_urls = ['video search results link'] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     video_items = hxs.select("//ul[@id='results-list']/li[@class='result']") 
     #items = [] 
     for vi in video_items: 
      item = VideoItem() 
      link = vi.select("a[@class='result-link']/@href").extract()[0] 
      title = vi.select("a[@class='result-link']/@title").extract()[0] 
      #print title,link 
      item['title'] = title 
      item['url'] = link 
      yield item 

     next_page = hxs.select("//div[@id='page']/a") 
     for np in next_page: 
      next_url = np.select("@href").extract() 
      if next_url: 
       url = urlparse.urljoin(response.url, next_url[0]) 
       #url = response.url, str(next_page) 
       self.log("find next page url: %s"%url, log.INFO) 
       yield Request(url, callback=self.parse) 

我發現,在start_urls鏈接正確下載並正確地呈現:

<ul id="results-list" class="clearfix" static="bl=normal"> 
    <li class="result" href="" </li> 
    <li class="result" href="" </li> 
    <li class="result" href="" </li> 
    .... 

因此提取是成功的第一頁上,而下一次網頁鏈接被取出的JavaScript沒有呈現:

<ul id="results-list" class="clearfix" static="bl=normal"></ul> 
    <div id="loading">trying to load page for you, please be patient</div> 

所以刮停止,因爲它不能提取作爲鏈接results-list的結果沒有呈現。爲什麼第一頁是正確呈現,但第二個不是?我應該使用selenium而不是webkit and jswebkit

回答

0

最後我找出問題所在。有些網址沒有正確組成。

2

我不是專家,但我最近愛上了Scrapy和Selenium。我用perl和python主要用urllib2/beautifulsoup/regex/mechanize來抓取硬核,但遇到了我覺得不可能的網站需要處理的情況,網站廣泛使用ajax而沒有數據從源文件中提取。一些網站甚至無法通過屏蔽後期請求參數來破解,所以一段時間我放棄了我的期盼和夢想。

它花了我一點時間,但現在我在Webkit中使用Selenium,它很棒。我覺得自己像個黑客。

事實上,我很有信心大多數網站不能阻止我。它完美模擬用戶使用瀏覽器,我只是使用睡眠,以確保我允許頁面ajax正確加載。對於像亞馬遜這樣的困難網站來說,不要貪婪,讓你的點擊隨機分開。我有硒運行幾天沒有問題。

我肯定會推薦你看看硒。現在一切都使用Ajax。

+0

你說你在Webkit中使用Selenium?你的意思是PhantomJS作爲webdriver的Selenium? –

相關問題