首页 > 解决方案 > 从 easports.com 抓取数据,问题

问题描述

因此,我一直在研究 Python WebScraper,它正在爬取网站以从我们的 FIFA ProClub 中查找数据(例如获胜、失败)。我已经在第三方网站上使用了 BeautifulSoup 和请求,但现在我在www.ea.com/de-de/games/fifa/fifa-20/pro-clubs/rankings网站上苦苦挣扎,不仅因为表格需要一些时间来加载(我以为我通过“等待元素加载”来解决这个问题),而且还因为源代码。显然,下载纯源代码时代码没有完全显示,就在我检查我想要抓取的特定元素时。我还注意到,当我检查时,加载代码需要一些时间。我想问题的一部分是元素“ea-elements-loader”,它包含了我想要的 div,但我真的不明白他们在那里做了什么。基本的抓取不是我的问题,我知道硒可能是某种矫枉过正。

总结的主要问题是,当打印代码时,我正在寻找的 div 类丢失了,即使在使用 chrome 检查工具时它也会出现。

我真的被困在这一点上,代码在下面

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

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

DRIVER_PATH = './chromedriver.exe'
driver = webdriver.Chrome(options=options, executable_path=DRIVER_PATH)
driver.get("https://www.ea.com/de-de/games/fifa/fifa-20/pro-clubs/rankings")

#edited
time.sleep(5)

print(driver.page_source)
soup = BeautifulSoup(driver.page_source, 'html.parser')
code_soup = soup.find_all(("div", {"class": "eapl-proclub-table__data"}))
driver.quit()

标签: javascriptpythonhtmlseleniumweb-scraping

解决方案


当我测试了您的代码时,以下行似乎引发了超时异常:

myElem = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'eapl-proclub-table__data')))

我已将此行替换为:

time.sleep(5)

你的代码有效。它打印出整个 page_source


推荐阅读