Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用py3上的bs4从网页上的表中的隐藏行下载数据_Python_Python 3.x_Beautifulsoup - Fatal编程技术网

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

Python 如何使用py3上的bs4从网页上的表中的隐藏行下载数据,python,python-3.x,beautifulsoup,Python,Python 3.x,Beautifulsoup,我想知道如何从隐藏行中包含的第一个表下载数据,并通过以下链接将其保存到数组中: 要查看它们,我必须按您在图像中看到的按钮“显示更多匹配项”。 重要的是,代码下载第一个匹配表中的每个数字/名称,甚至是问题焦点所在的隐藏行中的元素。 当您按下该按钮时,表中会显示与该玩家最老游戏相关的其他行。 我使用了您在下面看到的代码,并且只能下载您看到的信息,而不能下载按下按钮后获得的信息 for record in link.findAll('a', class_ = 'leagueTable__team')

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

要查看它们,我必须按您在图像中看到的按钮“显示更多匹配项”。
重要的是,代码下载第一个匹配表中的每个数字/名称,甚至是问题焦点所在的隐藏行中的元素。 当您按下该按钮时,表中会显示与该玩家最老游戏相关的其他行。
我使用了您在下面看到的代码,并且只能下载您看到的信息,而不能下载按下按钮后获得的信息

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:


莫斯特拉·皮因科特里
$this=$('.profileTable_uu行--leagueHeading')
$this.hide();
$(文档).ready(函数(){
$this.eq(0.show();
var actualElement=$this.eq(0.attr)(“数据状态”);
对于(变量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');
}
}
})

我不知道bs4的情况,但是

在单击“显示更多”链接之前,“隐藏”数据实际上不在页面中。因此,您需要使用类似硒的东西来:

  • 找到“显示更多”链接
  • 点击链接
  • 使用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驱动程序


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

    对于我来说,我必须使用python中的代码执行您在div类中看到的脚本。换句话说,我必须使用python中的代码按下该按钮。但它永远不会起作用,硒会帮你的。selenium打开页面后。搜索链接并调用链接上的
    click()
    。@TommasoFaedo,查看我答案的更新。它向您展示了如何使用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()