【问题标题】:How to avoid overwriting data when creating a list? Selenium Webdriver, Python创建列表时如何避免覆盖数据? Selenium 网络驱动程序,Python
【发布时间】:2020-08-28 16:49:40
【问题描述】:

我想通过点击歌曲来抓取以下网站上的每一页:https://www.top40.nl/top40/2020/week-34(针对每年和周数),然后移动到“songinfo”,然后抓取那里列出的表格中的所有数据。对于这个问题,我到目前为止只刮了标题。

这是我使用的网址: url = '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'))```

【问题讨论】:

  • 也许您可以将每个标题保存到一个文件中。这样,您知道您可以拥有一个文件,您甚至可以在解析站点一次后多次使用该文件。也许添加更多您可以获得的信息。

标签: python selenium selenium-webdriver web-scraping selenium-chromedriver


【解决方案1】:

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

【讨论】:

  • 非常感谢!简单的解决方案效果很好。只有一个后续问题,因为我的输出中有很多空格。有没有一种简单的方法可以在创建列表时或之后删除它?
  • 如果songs_list 中的元素是字符串,您可以尝试使用字符串isspace 方法过滤空白元素。像filtered_list = [song for song in songs_list if not song.isspace()] 这样的列表理解应该可以解决问题。
  • 再次感谢您的回复。但是,这似乎不起作用。我在songs_list.append 之后添加它对吗?输出当前看起来像这样:My Culture 1 Giant Leap 当我想将它组合到一个数据帧时会导致问题。我可以在打印函数中添加一些东西以删除所有选项卡和空格吗?
  • 我注意到您在此评论框中看不到空白,但无论如何,“1 Giant Leap”周围有很多空白。
猜你喜欢
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多