Разбор данных таблицы из HTML, полученный из сети - PullRequest
1 голос
/ 05 ноября 2019

Прямо сейчас в моем коде я получил HTML с веб-сайта бейсбола, который отображает статистику реестра игроков. В HTML есть несколько таблиц, и мне нужны только данные из той, которая размещена ниже. Я не уверен, как отделить только эту таблицу от HTML.

/*this code retrieves the HTML and is what I've tried to do */  
if let url = URL(string: "https://www.examplewebsite.com") {
            do {
                let contents = try String(contentsOf: url)
                statsHTML = contents //statsHTML is a string 

                let doc: Document = try SwiftSoup.parse(statsHTML)
                let table : [Element] = try doc.getElementsByTag("div").array() //attempt to parse by div name

                for div in table {
                    let statsTable = try div.getElementById("baseball-hitting-stats-table") //name of table 
                    print(statsTable) //prints all nil values
                }




/*This is a section of the table in HTML code that I want to 
parse*/

<div name="baseball-hitting-stats-table" class="team-stats-table">

<div class="collclubsports-component tab-wrapper"> <h3 
class="stats-title">Hitting Stats</h3><div style="overflow:auto;">   
<table class="collclubsports-component table-reponsive stats- 
 table">

 </thead><tbody class="collclubsports-component active" name="page- 
 1"><tr><td><a href="/league/player/?player=36c85410-e987-4a73- 
 8b36-e8c0d7ff1eed&season=46d3ea9a-a080-4273-befb- 
 58b30c2adb01">John, Doe</a></td><td>13</td><td>2</td><td>7</td> 
 <td>0</td><td>0</td><td>0</td><td>5</td><td>2</td><td>2</td> 
 <td>2</td><td>0</td><td>0.538</td><td>0.600</td><td>0.538</td> 
 <td>1.138</td><td>0</td><td>0</td><td>0</td><td>0</td><td>7</td> 
 <td>0</td><td>15</td></tr> </table>

Я успешно извлек все элементы div и использовал getElementsByID в попытке получить нужную таблицу, но она печатает все ноль. Спасибо за любую помощь.

1 Ответ

0 голосов
/ 05 ноября 2019

Вы используете name в своем div с именем baseball-hitting-stats-table, а затем пытаетесь использовать document.getElementById(). name - это более старый запрос DOM, используемый с document.all или document.getElementsByName().

Я бы использовал document.getElementById(), но вам нужно поставить id на элемент, а не name.

Поэтому просто измените эту строку в разметке, если можете.
до:
<div name="baseball-hitting-stats-table" class="team-stats-table">
после:
<div id="baseball-hitting-stats-table" class="team-stats-table">

Или, если можете, 'Для изменения разметки вы можете использовать
document.getElementsByName('baseball-hitting-stats-table')[0]
или
document.all.baseball-hitting-stats-table.

...