【发布时间】:2022-01-15 23:46:49
【问题描述】:
!pip install selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
from datetime import datetime
import pandas as pd
errors = []
season = []
for id in range(46605, 46985):
my_url = f'https://www.premierleague.com/match/{id}'
option = Options()
#option.headless = True
driver = webdriver.Chrome(options=option)
driver.get(my_url)
代码运行良好,直到这里。
date = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="mainContent"]/div/section/div[2]/section/div[1]/div/div[1]/div[1]'))).text
date = datetime.strptime(date, '%a %d %b %Y').strftime('%m/%d/%Y')
home_team = driver.find_element_by_xpath('//*[@id="mainContent"]/div/section/div[2]/section/div[3]/div/div/div[1]/div[1]/a[2]/span[1]').text
away_team = driver.find_element_by_xpath('//*[@id="mainContent"]/div/section/div[2]/section/div[3]/div/div/div[1]/div[3]/a[2]/span[1]').text
执行这些行时会弹出一个错误。 Error Screenshot 1
【问题讨论】:
-
我不会将 selenium 驱动程序放在 for 循环中 - 它非常慢,并且会在这里运行近 400 次。没有理由多次打开和关闭链接。另外,请查看stackoverflow.com/questions/45688020/…
-
添加到@Joe 的评论中,我看到您使用了很多长 xpath,这不是一个好习惯。尝试使用狭义的 xpath,例如第一个元素(日期):
//div[@class='matchInfo']//div[contains(@class, 'matchDate')] -
@Joe 是 Java 语言,你能推荐一个 python 代码吗?
-
@AnandGautam 如果可能的话,你能否写出我不知道的确切语法。如果打扰了,我很抱歉
-
我已经在我之前的评论中给了你日期。只需将 xpath 替换为我的,因为它更相对。这个是给 home_team 的:
//div[@class='team home']这个是给 away_team//div[@class='team away']
标签: python selenium selenium-webdriver web-scraping