!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
執行這些行時會彈出錯誤。 錯誤截圖 1
錯誤截圖 2
uj5u.com熱心網友回復:
為什么不使用英超聯賽網站使用的 api?
import requests
fixture = 66553
headers = {
'accept':'*/*',
'accept-encoding':"gzip;q=1.0, identity; q=0.5",
'accept-language':'en-ZA,en;q=0.9,en-GB;q=0.8,en-US;q=0.7,de;q=0.6',
'content-type':'application/x-www-form-urlencoded; charset=UTF-8',
'origin':'https://www.premierleague.com',
'referer':'https://www.premierleague.com/',
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}
url = f'https://footballapi.pulselive.com/football/broadcasting-schedule/fixtures/{fixture}'
data = requests.get(url,headers=headers).json()
print(data['fixture']['attendance'])
print(data['fixture']['kickoff']['label'])
print(data['fixture']['teams'])
url = f'https://footballapi.pulselive.com/football/fixtures/{fixture}/textstream/EN?pageSize=1000&sort=desc'
data = requests.get(url,headers=headers).json()
for message in data['events']['content']:
print(message['text'])
uj5u.com熱心網友回復:
@Kaustav,將其寫在答案中,因為它是一個代碼塊,并且不知道如何將其放在評論部分。盡管我贊同@Joe 的想法,但由于您想要一個精確的語法,我想我可以整理一段代碼來向您展示。因此,這里的代碼打開瀏覽器,獲取詳細資訊(正如您在代碼中輸入的那樣),然后將它們存盤在一個串列中(用于此任務的顯示目的,但實際上可能不需要它 - 取決于您的要求)。
我要再次重申,打開、使用和關閉瀏覽器(甚至是無頭瀏覽器)進行如此多的迭代可能會在回圈中的某個時間點影響性能,而你所有的時間都會浪費掉。我強烈建議您找到該網站的 API(如果可用)并使用它來取得成功。
話雖如此,這是供您使用的代碼。
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 p
import time
errors = []
season = []
url_ls=[] # used to show to query creator a demo
for id in range(46605, 46985):
my_url = f'https://www.premierleague.com/match/{id}'
option = Options()
option.add_argument('--headless')
option.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=option)
driver.get(my_url)
title = driver.current_url
try:
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//*[text()='Accept All Cookies']"))).click()
except:
print("cookie modal not found")
continue
# time.sleep(10)
match_date = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='matchInfo']//div[contains(@class, 'matchDate')]"))).text
match_date_f = datetime.strptime(match_date, '%a %d %b %Y').strftime('%m/%d/%Y')
home_team = driver.find_element(By.XPATH, "//div[@class='team home']").text
away_team = driver.find_element(By.XPATH, "//div[@class='team away']").text
tup = (title "|" match_date "|" home_team "|" away_team)
url_ls.append(tup)
driver.close()
print(url_ls) # used to show to query creator a demo
這是輸出(我只是在此代碼中附加了當前 url 和元素的文本,但您可以進一步擴展此塊并添加您的元素 - 您可以在匯入 pandas 時將資料發送到資料框和然后到 excel 或 csv - 你喜歡它)
['https://www.premierleague.com/match/46605|Sat 10 Aug 2019|Liverpool|Norwich City', 'https://www.premierleague.com/match/46606|Sat 10 Aug 2019|AFC Bournemouth|Sheffield United', 'https://www.premierleague.com/match/46607|Sat 10 Aug 2019|Burnley|Southampton', 'https://www.premierleague.com/match/46608|Sat 10 Aug 2019|Crystal Palace|Everton', 'https://www.premierleague.com/match/46609|Sun 11 Aug 2019|Leicester City|Wolverhampton Wanderers']
Process finished with exit code 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/415051.html
標籤:
