2017-10-09 167 views
0

我刮的web傳單刮網頁傳單

https://flipp.com/flyers/groceries

POSTAL CODE N2L2A1 

然而,雖然所有的項目都在HTML編碼具有相同的標籤和類名,我無法湊硒一切。

我試過find_elements方法,但仍然只能刮一個值,概念上它不應該是這種情況。

因爲我使用的是普通的類名,所有的東西都應該列出來。

這不是這種情況。我錯過了什麼嗎?

我的代碼看起來是這樣的:你選擇

driver.find_elements_by_xpath("//html/body/flipp-dialog/div/flipp-toast-container/div/flipp-item-dialog/div/h2/span") 
+0

我的想法是......貌似每個圖像是一個可點擊的標籤,這些標籤可點擊鏈接中給出單個頁面就是上面的鏈接。 –

+1

該鏈接不適合我 - 404呃哦意外的錯誤 –

+0

嗨馬丁,謝謝你的嘗試。你可以試試https://flipp.com/flyers/groceries –

回答

2

XPath是一個問題。

  1. 通常你應該避免絕對xpath。相反,選擇相對xpath,從實際上對你有意義的項目開始。
  2. 確保選擇了一個實際存在於頁面上的元素。有時候這意味着在元素可用之前,您需要懸停或點擊某件東西。例如,當我搜索flipp-toast-container您的評論提供的頁面上,所有它是:

    <flipp-toast-container global=""><flipp-toast></flipp-toast><div class="toastable-content"></div></flipp-toast-container> 
    

    所以不會選擇任何有意義的東西。

所以,如果你想選擇頁面上的每一個旅客的名字列出它們(如flipp.com/flyers/groceries),使用XPath這樣的:

//flipp-flyer-listing-item//p[@class="flyer-name"] 

(即:我們選擇flipp-flyer-listing-item,它代表每個傳單的容器;並選擇p,屬性爲@class=flyer-name;我們跳過//之間的任何級別,因爲找到這兩個項目之間的關係非常重要,無論它們位於何處

如果你的目標是真正湊每個傳單的內容(網頁一樣https://flipp.com/flyer/1352064-zehrs-weekly-flyer),你將不得不導航到傳單的內容,然後再選擇每個項目爲:

//flipp-flyerview//a[@class="item-container"]/div 

注:也有除xpath之外的其他方法來選擇該項目,並且我拋開導航主題,因爲它不是問題的一部分。

+0

哇!謝謝kiril。這是一個很好的解釋。 –

0

除了定位器更正之外,還應該考慮find_elements ...(複數變體)應該返回一個您應該能夠遍歷的列表。鑑於此,你甚至不應該爲偏移量過多而流汗。

0

這裏是解析Flipp傳單的簡單方法。在這個例子中,你的瀏覽器將返回application/json內容類型。

https://backflipp.wishabi.com/flipp/items/search?locale=[Your Language preference here]&postal_code=[Your postal code here]&q=[Your merchant here] 

//in this example you will get all items (description, price, image etc..) from all valid flyers from Walmart in in the area of H4A1B9 postal code 

https://backflipp.wishabi.com/flipp/items/search?locale=en-ca&postal_code=H4A1B9&q=Walmart 

//in this example you will search at Walmart for a specifific item 

https://backflipp.wishabi.com/flipp/items/search?locale=en-ca&postal_code=H4A1B9&q=Walmart AND milk 

//在這個例子中,你會搜索所有商家的specifific項目

https://backflipp.wishabi.com/flipp/items/search?locale=en-ca&postal_code=H4A1B9&q=milk