如何避免在创建列表时覆盖数据?SeleniumWebDriver,Python

2024-09-30 20:18:41 发布

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

我想在以下网站上刮取每个页面:https://www.top40.nl/top40/2020/week-34(每年和每周的数字),点击歌曲,然后移动到“songinfo”,然后刮取列表中的所有数据。对于这个问题,到目前为止我只勉强获得了题目

这是我使用的url: url='1〕https://www.top40.nl/top40/"

但是,当我打印歌曲列表时,它只会返回网站上的最后一个标题。因此,我相信我正在改写

希望有人能告诉我我犯了什么错误,如果有什么更简单的方法可以把每一页的表格都擦干净,我很高兴听到

请在下面找到我的python代码:

for year in range(2015,2016):
    for week in range(1,2):
        page_url = url+str(year) + '/' + 'week-' + str(week)
        driver.get(page_url)
        lists = driver.find_elements_by_xpath("//a[@data-linktype='title']")
        
        
        links = []
        for l in lists:
            print(l.get_attribute('href'))
            links.append(l.get_attribute('href'))
        
        for link in links:
            driver.get(link)
            
            driver.find_element_by_xpath("//a[@href='#songinfo']").click()
            
            songs = driver.find_elements_by_xpath(""".//*[@id="songinfo"]/table/tbody/tr[2]/td""")
            songs_list = []
            for s in songs: 
                print(s.get_attribute('innerHTML'))
                songs_list.append(s.get_attribute('innerHTML'))```

Tags: inurlforgetbydriverattributelinks
1条回答
网友
1楼 · 发布于 2024-09-30 20:18:41

songs_list = []位于for link in links循环内,因此每次新的迭代都会将其设置为空列表(然后附加到这个新的空列表)。结束所有循环后,只会看到创建的songs_list

最简单的修复方法是将songs_list = []行放在所有for循环之外,例如:

songs_list = []
for year in range(2015,2016):
    for week in range(1,2):
        # etc

相关问题 更多 >