Как загрузить данные из скрытых строк из таблицы на веб-странице, используя bs4 на py3 - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу знать, как я могу загрузить данные из первой таблицы, которые содержатся в скрытой строке, и сохранить их в массивы по следующей ссылке:

https://www.diretta.it/giocatore/dybala-paulo/W4myUVXR/

Чтобы увидеть их, мне нужно нажать кнопку "show more matches", которую вы видите на изображении.
Важно, чтобы код загружал каждое число / имя в первой таблице соответствий, даже элементы в скрытых строках, которые находятся в центре внимания.вопрос.Когда вы нажимаете эту кнопку, в таблице отображаются другие строки, относящиеся к самым старым играм этого игрока.
Я использовал код, который вы видите ниже, и смог загрузить только ту информацию, которую вы видите, а не информацию, которую вы получаете после нажатия кнопки.

for record in link.findAll('a', class_ = 'leagueTable__team'):
    linkplayer = record.get('href')
    destlink.append(linkplayer)

for i in range(len(destlink)):
    link_step1 = "https://www.diretta.it"+ destlink[i]+"/rosa/"
    link_team.append(link_step1)
    link_soap1=make_soup(link_step1)
    for record in link_soap1.findAll('div', class_='tableTeam__squadName--playerName'):
    for record1 in record.findAll("a"):
        linkplayer = record1.get('href')
        link_step2=diretta+linkplayer
        players.append(linkplayer)
        link_step2_list.append(link_step2)

for i in range(len(link_step2_list)):
    link_soap2 = make_soup(link_step2_list[i])
    for record in link_soap2.findAll('div', class_='playerTable__date'):
        date = record.get_text()
        print(date)

HTML:

 <div class = class="profileTable__row profileTable__row--last show-more-last-matches">
<a>Mostra più incontri</a>
</div>
<script type="text/javascript">
    $this = $('.profileTable__row--leagueHeading')
    $this.hide();
    $(document).ready(function() {
       $this.eq(0).show();
       var actualElement = $this.eq(0).attr('data-state');
       for(var i = 1; i < $this.length; i++) {
           if($this.eq(i).attr('data-state') != actualElement) {
               $this.eq(i).show();
               actualElement = $this.eq(i).attr('data-state');
          }
      }
   })

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Данные получены с помощью нового запроса и получают результат как json.Одна из возможностей - заставить скрипт выполнить этот запрос и проанализировать объект json.

0 голосов
/ 19 сентября 2019

Я не знаю о bs4, но ...

На самом деле «скрытые» данные отсутствуют на странице, пока вы не нажмете ссылку «показать больше».Поэтому вам нужно использовать что-то вроде селена, чтобы:

  1. найти ссылку "показать больше"
  2. нажать ссылку
  3. Использовать селен, чтобы найти всех игроков снова

Этот код откроет страницу, найдет ссылку и щелкнет по ней:

import unittest
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.diretta.it/giocatore/dybala-paulo/W4myUVXR/')

for link in driver.find_elements_by_tag_name('a'):
    if "Mostra" in link.text:
        link.click()

Вам также необходимо установить хром-драйвер на ваш компьютер ..

https://chromedriver.chromium.org/downloads

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