Пропуск элементов TR при использовании селена Python - PullRequest
0 голосов
/ 26 октября 2019

Я использую Селен Питон для очистки веб-страницы. Я хочу пропустить первые два элемента TR в таблице, потому что это заголовок и заголовки. Есть ли способ в Selenium или питонский способ пропустить первые два элемента TR?

Я попытался использовать конкретный x-путь TR, с которого я хочу начать, однако он не вытягивает все TR только конкретный.

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import statistics
import requests
import json
import numpy as np
import statistics
import pandas as pd
import xlsxwriter

browser = webdriver.Chrome("/ProgramData/chocolatey/bin/chromedriver.exe")


browser.get(
    "http://rotoguru1.com/cgi-bin/hyday.pl?mon=10&day=22&year=2019&game=fd")

table_rows = browser.find_element_by_xpath(
    '/html/body/table/tbody/tr/td[3]/table[4]').find_element_by_tag_name('tbody').find_elements_by_tag_name('tr')

players = []

for row in table_rows:
    cells = row.find_elements_by_tag_name('td')
    pos = cells[0].text
    print(pos)
    name = cells[1].text
    print(name)
    fpts = cells[2].text
    salary = cells[3].text
    team = cells[4].text
    opp = cells[5].text
    minutes = cells[7].text
    players.append([pos, name, fpts, salary, team, opp, minutes])

df = pd.DataFrame(players, columns=[
    "Position", "Name", "FPTS", "Salary", "Team", "Opponent", "Minutes"])
writer = pd.ExcelWriter('NBA_Stats', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')
df.style.set_properties(**{'text-align': 'center'})
pd.set_option('display.max_colwidth', 100)
pd.set_option('display.width', 1000)
print(players)
writer.save()

Ответы [ 3 ]

0 голосов
/ 26 октября 2019

Можете ли вы проверить, работает ли ниже xpath для вас?

//body//table[4]/tbody//tr[not(position()=1)][not(position()=1)]
0 голосов
/ 26 октября 2019

find_elements_by_tag_name() возвращает список, поэтому вы можете использовать любую обычную операцию со списком. Например, вы можете нарезать список:

for row in table_rows[2:]:

Это пропустит первые две строки.

0 голосов
/ 26 октября 2019

Чтобы пропустить первые две строки, просто измените цикл for на:

for r, row in enumerate(table_rows):
    if r < 2:
        continue

и оставьте остальные без изменений

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