2017-01-03 60 views
-1

我想要報廢Lulu webstore。我遇到以下問題。從JavaScript呈現的網站刮取數據

  • 網站內容動態加載。
  • 該網站試圖訪問時,重定向選擇國家頁面。
  • 選擇國家後,它彈出選擇交貨地點,然後重定向到主頁。
  • 當您嘗試以編程方式點擊結束頁面時,您會收到一個空的響應,因爲內容是動態加載的。

我有一個結束URL的列表,我必須從中抓取數據。例如,請考慮mobile accessories。現在我想

  • 獲取該頁面直接,這是動態加載繞過選擇國家,選擇位置彈出窗口,這樣我就可以用我的Scrapy XPath選擇提取數據的HTML源代碼。
  • 如果您建議我使用Selenium,PhantomJS,Ghost或其他來處理動態內容,請理解我在處理將發送給Scrapy的所有動態內容後,希望在Web瀏覽器中使用最終的HTML源代碼。
  • 另外,我嘗試使用代理來跳過選擇國家彈出窗口,但仍然加載它並選擇交付地點。
  • 我試過使用Splash,但是它返回了我選擇國家頁面的來源。
+0

好的內容意味着AJAX調用。只需獲取請求的結構,然後使用產品的ID進行循環調用即可。通常你只需要'request'模塊,與'BeautifulSoup'結合使用。我猜也是一樣。 –

+0

@Cal Eliacheff感謝您的評論,但你的方式問題是,即使我用cookie和用戶代理與web瀏覽器一樣提出請求,但我仍然得到相同的響應。我需要服務器和腳本之間的響應,它將處理這些動態內容並給出最終結果,以便我可以將它們饋送給scrapy。 – Mani

+0

你應該更好地看待電話。該位置存儲在您從「SelectLocation.aspx」中獲得的cookie中。例如:'http://www.luluwebstore.com/SelectLocation.aspx?Location = 13241&DeliveryMode = H&ReturnUrl = http:// www.luluwebstore.com'允許您繞過國家選擇。它看起來像只有GET請求,通常使用更簡單。恕我直言,你不希望爲這類網站使用scrapy。 –

回答

1

最後我找到答案。我使用EditThisCookie插件來查看Web頁面加載的Cookie。我發現它在我的本地存儲中存儲3個Cookie CurrencyCode,ServerId,Site_Config。我使用上面提到的插件以JSON格式複製cookie。我提到this manual用於在請求中設置cookie。

現在,我可以跳過這些位置,送貨地址彈出窗口。之後,我發現動態頁面通過<script type=text/javascript>加載,發現頁面url的一部分存儲在一個變量中。我使用split()提取了該值。這裏是獲取動態頁面url的腳本部分。

from lxml import html 
page_source=requests.get(url,cookies=jar) 
tree=html.fromstring(page_source.content)  
dynamic_pg_link=tree.xpath('//div[@class="col3_T02"]/div/script/text()')[0] #entire javascript to load product pages 
dynamic_pg_link=dynamic_pg_link.split("=")[1].split(";")[0].strip()#obtains the dynamic page url. 
page_link="http://www.luluwebstore.com/Handler/ProductShowcaseHandler.ashx?ProductShowcaseInput="+dynamic_pg_link 

現在我可以從這些LInks中提取數據。

感謝@Cal Eliacheff先前的指導。