如何使用py3上的bs4从网页上的表中的隐藏行下载数据

2024-10-02 02:30:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何从隐藏行中包含的第一个表中下载数据,并通过以下链接将其保存到数组中:

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');
          }
      }
   })


Tags: indivforshowlinkthisrecord按钮
2条回答

数据是通过一个新的请求获得的,结果是json。一种可能是让脚本执行该请求并解析json对象

我不知道bs4,但是

在单击“显示更多”链接之前,“隐藏”数据实际上不在页面中。所以你需要用硒来:

  1. 找到“显示更多”链接
  2. 单击链接
  3. 使用selenium再次找到所有玩家

此代码将打开页面,找到链接,然后单击它:

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()

你还需要在盒子上安装chrome驱动程序

https://chromedriver.chromium.org/downloads

相关问题 更多 >

    热门问题