反思我使用Python和Selenium抓取动态内容的方法

反思我使用Python和Selenium抓取动态内容的方法,python,selenium,Python,Selenium,目前,我正在从事一个项目,该项目将从各种类似设计的网站中获取包含动态内容的内容。我的最终目标是将所有这些数据聚合到一个应用程序或各种报告中。我在从一个页面中提取所需数据方面取得了一些进展,但我在这个领域缺乏经验和知识,这让我觉得我走错了路 上面的链接是我将从中提取的页面类型的完美示例 在我最初的尝试中,我能够让页面一直滚动到底部,同时使用手动滚动从各种元素收集数据。 cards=driver。通过css选择器(“div[class^='product-card\uu Content']”查找元

目前,我正在从事一个项目,该项目将从各种类似设计的网站中获取包含动态内容的内容。我的最终目标是将所有这些数据聚合到一个应用程序或各种报告中。我在从一个页面中提取所需数据方面取得了一些进展,但我在这个领域缺乏经验和知识,这让我觉得我走错了路

上面的链接是我将从中提取的页面类型的完美示例

在我最初的尝试中,我能够让页面一直滚动到底部,同时使用手动滚动从各种元素收集数据。
cards=driver。通过css选择器(“div[class^='product-card\uu Content']”查找元素
这使我能够动态地提取我需要的所有数据点,不包括最重要的类别,它恰好是父元素,这是我可以在excel中手动映射的内容,但我更希望能够将其与其他所有内容一起提取

这让我想到也许我应该采取自上而下的方法,而不是我所看到的自下而上的方法?但是,无论我如何努力地根据别人的建议来尝试,我都无法让它按预期工作,因为我缺乏理解,我可以从父div中提取类别

根据其他人的输入,我能够做一个分类,并使用下面的代码,我能够获得类别以及产品名称,而无需滚动页面,这与我迄今为止在该项目中的所有经验都不符-我不清楚这是如何/为什么可能的

for product_group_name in driver.find_elements_by_css_selector("div[class^='products-grid__ProductGroupTitle']"):

    for product in driver.find_elements_by_xpath("//div[starts-with(@class,'products-grid__ProductGroup')][./div[starts-with(@class,'products-grid__ProductGroupTitle')][text()='" + product_group_name.text + "']]//div[starts-with(@class,'consumer-product-card__InViewContainer')]"):
               
        print (product_group_name.text, product.text)
这段代码的问题在于,无论我如何处理它,我都无法提取品牌和价格的额外数据点,因为它不依赖滚动,所以速度要快得多。显然这是我的方法,但超出了我目前的知识水平

任何具体的或一般性的建议都将不胜感激,因为我想随着我的知识积累,将其扩展为更强大的东西,我希望能够在一天中的设定点扫描多个不同的URL,远离这一点,但如果可能的话,我想确保我开始走上正确的道路。根据我提供的信息,在这种情况下,自上而下的方法更好吗?自下而上?这是主观的吗

我已经注意到关于提取页面的整个源代码并使用它的评论,这是一种有效的方法,并且可能更适合我的需要吗?基于页面的动态特性,这可能吗


谢谢。

看来您可以缩短定位器。。。瞄准你需要的。例如,您可能会删除“text()=”+product_group_name.text”之前的所有内容。如果您获得了所需的div,请记住,您可以在这些WebElement上运行其他查找方法。将其设置为相对于品牌和价格(如果它们包含在该元素中…)的get,因此product.find_元素(…我认为使用页面源代码没有任何好处。您的定位器(xpath/css)擅长处理DOM以获得所需内容。