尝试使用 Python 和 Selenium 迭代地滚动和抓取网页

2023-12-02

我最近问了一个问题(参考这里:Python Web 抓取(Beautiful Soup、Selenium 和 PhantomJS):仅抓取整个页面的一部分)这有助于确定我在抓取滚动时动态更新的页面的所有内容时遇到的问题。然而,我仍然无法使用 selenium 使我的代码指向正确的元素并迭代地向下滚动页面。我还发现,当我手动向下滚动相关页面时,加载页面时的一些原始内容会消失,而新内容会更新。例如,看下面的图片......

enter image description here I have targeted the container with the data I am trying to scrape below (highlighted in blue).

首先,我无法选择正确的元素来向下滚动页面,因为我以前从未这样做过。我相信我必须使用 selenium 来定位容器,然后使用“execute_script”函数向下滚动页面,因为该表嵌入在网页正文中。但是我似乎无法让它发挥作用。

    scroll = driver.find_element_by_class_name("ag-body-viewport")
    driver.execute_script("arguments[0].scrollIntoView();", scroll)

其次,一旦我能够滚动,我将需要一次向下滚动一点并迭代地刮擦。我的意思是,如果你查看图像,你会在图像中看到一堆“div”标签

例如...当页面加载时,我将 html 传递给 Beautifulsoup。我可以抓取前 40 行。如果我向下滚动,比如说 40 行,我会将第 40 - 80 行传递给 beautifulsoup,并且第 1 - 40 行将不再可用,因为数据已动态更新......

长话短说,我想要的是能够抓取提供的图像中的所有内容,然后使用 selenium 向下滚动大约 40 行,抓取接下来的 40 行,然后向下滚动并抓取接下来的 40 行,依此类推......任何有关如何让 selenium 在此嵌入式容器中滚动以及如何迭代向下滚动以便在滚动时动态更新时捕获容器中的所有数据的提示。任何额外的帮助将不胜感激。


从我在屏幕截图中看到的情况来看,您似乎需要迭代地滚动到表中最后一行的视图- 最后一个元素ag-row class:

import time   

while True:
    rows = driver.find_elements_by_css_selector("tr.ag-row")
    driver.execute_script("arguments[0].scrollIntoView();", rows[-1])

    time.sleep(1)

    # TODO: collect the rows

您还需要找出循环退出条件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试使用 Python 和 Selenium 迭代地滚动和抓取网页 的相关文章