不加载使用scrapy(python)脚本的react/typescript应用程序

2024-05-16 04:59:49 发布

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

我正在努力抓取某个网页(beachvolleyball.nrw

在过去的两天里,我使用了我能找到的所有库,但始终无法加载脚本标记

当使用开发人员工具选择比赛时,数据正在加载,但我无法将其与selenium和其他工具一起使用

我要刮取的对象:The torunement-objects I want to scrape

Dom中的元素:Elements in the DOM

我已经尝试了很多不同的方法,给你看一个是没有多大意义的。 当打开网页时,当元素还没有加载时,请看一下DOM 帮助我使用Splash 3.5或您喜欢的任何其他解决方案加载数据:)

多谢各位!在此之前,我将继续努力:)

TLDR:我无法从带有splash的here加载脚本,或者在DOM中导航的任何其他解决方案都不是问题


Tags: 工具数据对象方法标记脚本元素网页
2条回答

JavaScripts呈现的页面,您可以使用selenium并等待先加载表,然后再从表中获取值

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path="/path/to/chromedriver")
driver.get("https://www.beachvolleyball.nrw/")
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,".table-tournaments.table.table-hover")))
rows=driver.find_elements_by_css_selector(".table-tournaments.table.table-hover>tbody>tr")
for row in range(len(rows)):
    if len(rows[row].find_elements_by_xpath("./th"))>0:
        print("Row numner: " + str(row))
        for th in rows[row].find_elements_by_xpath("./th"):
            print(th.text)
        print("====================================")
    if len(rows[row].find_elements_by_xpath("./td")) > 0:
        print("Row numner: " + str(row))
        for td in rows[row].find_elements_by_xpath("./td"):
            print(td.text)
        print("====================================") 

控制台输出:

Row numner: 0
OKTOBER 2020
====================================
Row numner: 1
03.10. Sa.

C
Hürth
30/32

====================================
Row numner: 2
03.10. Sa.

C
Münster
2/12

====================================
Row numner: 3
03.10. Sa.

S
Brühl Senioren
3/8

====================================
Row numner: 4
03.10. Sa.

S
Brühl Senioren
6/8

====================================
Row numner: 5
04.10. So.

C
Hürth
11/16

====================================
Row numner: 6
04.10. So.

C
Hürth
6/16

====================================
Row numner: 7
04.10. So.

C
Münster
16/16

====================================
Row numner: 8
10.10. Sa.

C
Münster
15/12

====================================
Row numner: 9
17.10. Sa.

C
Münster
16/16

====================================
Row numner: 10
DEZEMBER 2020
====================================
Row numner: 11
30.12. Mi.

B
Beachliga Castrop-Rauxel
41/40

====================================
Row numner: 12
31.12. Do.

B
Beachliga Castrop-Rauxel
36/35

====================================
Row numner: 13
31.12. Do.

B
Beachliga Castrop-Rauxel
29/35

====================================

您要刮取的表由WebSocket加载。您可以使用开发人员工具中的“网络”选项卡检查这一点。这包括在您的webbrowser中。通常由F12[CTRL] + [SHIFT] + 'C'打开。然后导航到“网络”选项卡,在这里您可以看到WebSocket和从服务器发送的消息,以及通过浏览器发送到服务器的消息。我认为最简单的方法是通过selenium或使用类似websocket-client的库连接到WebSocket

相关问题 更多 >