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

2024-04-23 15:50:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近问了一个问题(这里引用:Python Web Scraping (Beautiful Soup, Selenium and PhantomJS): Only scraping part of full page),这个问题有助于确定我在抓取一个页面的所有内容时遇到的一个问题,该页面在滚动时会动态更新。但是,我仍然无法使用selenium将代码转换为指向正确的元素并迭代地向下滚动页面。我还发现,当我手动向下滚动有问题的页面时,一些原始内容在页面加载时会消失,而新内容则会更新。例如,看看下面的图片。。。在

enter image description here 我已经将我试图从下面抓取的数据(以蓝色突出显示)作为容器的目标。在

首先,我有困难选择正确的元素向下滚动页面,因为我从来没有这样做过。我相信我必须使用selenium来定位容器,然后使用“execute_script”函数向下滚动页面,因为这个表嵌入在web页面的主体中。不过,我似乎不能让它发挥作用。在

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

第二,一旦我有了滚动的能力,我就需要一次向下滚动一点,然后反复地刮。我的意思是,如果你看图片,你会看到在

例如。。。当页面加载并将html传递给Beautifulsoup时。我能刮到前40排。如果我向下滚动,比如说40行,我将把第40-80行传递给BeautifulGroup,第1-40行将不再可用,因为数据已经动态更新。。。在

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


Tags: 数据web元素内容executedriverseleniumscript
1条回答
网友
1楼 · 发布于 2024-04-23 15:50:38

根据我在屏幕截图上看到的,您似乎需要迭代地滚动到表中最后一行的视图中,最后一个元素带有ag-row类:

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

您还需要确定循环退出条件。在

相关问题 更多 >