【问题标题】:Python - getting a unique listPython - 获取唯一列表
【发布时间】:2019-12-07 23:29:20
【问题描述】:

我正在使用下面的代码:

 import requests
 from bs4 import BeautifulSoup

 def recursiveUrl(url, link, depth):
     if depth == 5:
         return url
     else:
         print(link['href'])
         page = requests.get(url + link['href'])
         soup = BeautifulSoup(page.text, 'html.parser')
         newlink = soup.find('a')
         if len(newlink) == 0:
             return link
         else:
             return link, recursiveUrl(url, newlink, depth + 1)

 def getLinks(url):
     page = requests.get(url)
     soup = BeautifulSoup(page.text, 'html.parser')
     links = soup.find_all('a')
     for link in links:
         links.append(recursiveUrl(url, link, 0))
     return links

 links = getLinks("https://www.rogerebert.com/reviews/")

 def unique(links):

     uniqueValues = {}
     for i in links:
         uniqueValues.add(i)

     for i in uniqueValues:
         print(i)

 unique(links)

我尝试了多种方法来尝试仅打印唯一条目,但我的输出是一个长列表,如下所示,理想情况下,我应该只打印每个唯一条目:

再次感谢大家的帮助。

【问题讨论】:

  • 我会假设链接并不完全相同,这是唯一的解释。顺便说一句,您还可以将列表转换为只能包含唯一项目的集合。
  • 我使用您使用的方法快速编写并运行了一个非常相似的 Python 程序,它确实运行得非常好。您是否验证过链接完全相同,就像@sammy 建议的那样?
  • 无法用[1, 1, 2] 之类的列表重现问题。你需要创建一个minimal reproducible example
  • 您需要向我们提供Minimal Reproducible example。只需给我们一个包含 10 个 URL 的静态列表。如果您只向我们显示 BeautifulSoup 代码的 URL,则无法重现。在 SO 上,您需要为您的问题提供 MCVE。

标签: python unique


【解决方案1】:

您的代码 uniqueValues.add(i) 有错误,因为您将其设置为 dict 以前和dict 没有添加!

import requests
from bs4 import BeautifulSoup

r = requests.get('https://www.rogerebert.com/reviews/')
soup = BeautifulSoup(r.text, 'html.parser')

links = set()
for item in soup.findAll('a'):
    item = item.get('href')
    links.add(item)

for item in links:
    print(item)

【讨论】:

    【解决方案2】:

    尝试使用集合而不是使用列表。这样您就不会拥有同一个网站的多个实例。

    uniqueValues = {}
    for i in links:
        uniqueValues.add(i)
    
    for i in uniqueValues: 
        print(i)
    

    【讨论】:

    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 2021-11-16
    • 2014-11-20
    • 2021-06-06
    • 2012-10-05
    • 2015-04-26
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多