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

Scraping a react/typescript app with scrapy (python) - Scripts don't load

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

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

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

我要抓取的对象:

Dom 中的元素:

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

非常感谢!在那之前我会继续努力:)

TLDR:我无法使用启动或在 DOM 中导航的任何其他解决方案从 here 加载脚本不是问题!

您要抓取的 table 由 websockets 加载。您可以使用开发人员工具中的网络选项卡进行检查。这包含在您的网络浏览器中。通常由 F12[CTRL] + [SHIFT] + 'C' 打开。然后导航到“网络”选项卡,在这里您可以看到 websockets 和从服务器发送的消息,以及通过浏览器发送到服务器的消息。我认为最简单的方法是通过 selenium Or connecting to the WebSocket by using a library like websocket-client

JavaScripts 呈现的页面您可以使用 selenium 并等待 table 先加载,然后再从 table.

获取值
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

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