2017-10-09 118 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