Python невозможно обновить sh выполнение скрипта - PullRequest
1 голос
/ 01 мая 2020
from urllib.request import urlopen
from selenium import webdriver
from bs4 import BeautifulSoup as BSoup
import requests
import pandas as pd
from requests_html import HTMLSession
import time
import xlsxwriter
import re
import os

urlpage = 'https://racing.hkjc.com/racing/information/English/Racing/LocalResults.aspx?RaceDate=2019/07/14&Racecourse=ST&RaceNo=1'

# Setup selenium 
driver = webdriver.Firefox(executable_path = 'geckodriver path')
# get web page
driver.get(urlpage)
time.sleep(10)

bs_obj = BSoup(driver.page_source, 'html.parser')

# Scrape table content
table = bs_obj.find('table', {"f_tac table_bd draggable"})
rows = table.find_all('tr')
table_content = []

for row in rows[1:]:
    cell_row = []
    for cell in row.find_all('td'):
        cell_row.append(cell.text.replace(" ", "").replace("\n\n", " ").replace("\n", ""))
    table_content.append(cell_row)

header_content = []
for cell in rows[0].find_all('td'):
    header_content.append(cell.text)

driver.close()

race_writer = pd.ExcelWriter('export path', engine='xlsxwriter')

df = pd.DataFrame(table_content, columns=header_content)
df.to_excel(race_writer, sheet_name='game1')

Привет всем, я пытаюсь оценить результат гонок от HKJ C. Когда я выполнял приведенный выше код, произошла одна из следующих ошибок:

  1. Файл Excel не создан
  2. Df не записан в файл Excel <пустой файл Excel созданный </li>
  3. Скажем, если я успешно обработал результат игры 1, я изменил сценарий, чтобы продолжить анализ сценария игры 2, но он все равно дает мне результат игры 1.

Ценю, если кто-нибудь может помочь.

1 Ответ

1 голос
/ 01 мая 2020

Я изменил ваш скрипт на приведенный ниже. Подход заключается в том, чтобы нажать каждую из соответствующих кнопок «Sha Tin» (см. range(1, len(shatin)-1)) и собрать данные таблицы расы. Таблицы гонок добавляются в список под названием «гонки». Наконец, запишите каждую из таблиц расы на отдельные листы в Excel (обратите внимание, что вам больше не нужно BeautifulSoup).

Добавьте их в свой список импорта:

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

Тогда:

urlpage = 'https://racing.hkjc.com/racing/information/English/Racing/LocalResults.aspx?RaceDate=2019/07/14&Racecourse=ST&RaceNo=1'

# Setup selenium 
driver = webdriver.Firefox(executable_path = 'geckodriver path')
# get web page
driver.get(urlpage)

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,"//table[@class='f_fs12 f_fr js_racecard']")))
shatin=driver.find_elements_by_xpath("//table[@class='f_fs12 f_fr js_racecard']/tbody/tr/td")

races=[]
for i in range(1, len(shatin)-1):
    shatin = driver.find_elements_by_xpath("//table[@class='f_fs12 f_fr js_racecard']/tbody/tr/td")
    #time.sleep(3)
    #WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[@class='performance']")))
    shatin[i].click()
    table = pd.read_html(driver.find_element_by_xpath("//div[@class='performance']").get_attribute('outerHTML'))[0]
    races.append(table)

with pd.ExcelWriter('races.xlsx') as writer:
    for i,race in enumerate(races):
        race.to_excel(writer, sheet_name=f'game{i+1}', index=False)
    writer.save()

driver.quit()

Выход: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...