【问题标题】:set returning duplicates?设置返回重复项?
【发布时间】:2017-08-20 21:48:10
【问题描述】:

我从人口普查网站中提取 URL 列表,而不是将它们放在一组中以确保我不会出现重复,然后将该非重复 URL 列表导出到 .csv 文件中。但是,我的 set 继续返回重复值,这是不可能的。这是我的代码:

import bs4
from bs4 import BeautifulSoup
import requests
import csv

source_link = "https://www.census.gov/data/tables/2016/demo/popest/state-total.html"
s = requests.get(source_link)
usable_html = s.text
setupsoup = BeautifulSoup(usable_html, 'lxml')
silver = csv.writer(open("WGUCSV.csv", "r+"))
silver.writerow(["URL"])

for set(gold) in setupsoup.findAll('a', href=True):
    gold.add['href']
    print (gold)
    silver.writerow(gold)

作为一个额外的问题,我还需要一种将生成的相对 URL 转换为绝对 URL 的方法,最好是 将它们排序到非重复列表中之前。我真的认为将它们全部添加到 set 会自行过滤掉重复项。

【问题讨论】:

  • for set(gold) in setupsoup.findAll('a', href=True): 甚至不是有效的 Python。
  • 您的意思是for gold in set(setupsoup.findAll('a', href=True)): ...?或for gold in setupsoup.findAll('a', href=True): gold = set(gold) ...
  • 我的循环现在是:for gold in set(setupsoup.findAll('a', href=True)): gold.add['href'] 仍然以某种方式返回重复项。

标签: python python-3.x csv


【解决方案1】:

如果您想添加到集合中,请尝试

gold = set()
for x in setupsoup.findAll('a', href=True):
    gold.add(x)

或者更简单

gold = set(setupsout.findAll('a', href=True))

【讨论】:

猜你喜欢
  • 2018-05-23
  • 1970-01-01
  • 2016-05-08
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
相关资源
最近更新 更多