【问题标题】:Removing duplicate urls python BeautifulSoup using set() blows apart the urls使用 set() 删除重复的 url python BeautifulSoup 会破坏 url
【发布时间】:2019-07-17 13:45:49
【问题描述】:

在 python 中,我使用 BeautifulSoup 从一个项目的网站上抓取 url,一切正常,直到我尝试通过将标签传递给一个集合对象来删除重复项。标签被“炸毁”。这是我的代码和打印结果示例。

file = open('parsed_data.csv', 'w')

for link in soup.find_all('a', attrs={'href': re.compile("^http")}):

    soup_link = str(link)
    if soup_link.endswith('/') or soup_link.endswith('#'):
        soup_link = soup_link[-1]

    soup_link_unique = str(set(soup_link))

    print (soup_link)
    print (soup_link_unique)

    file.write(soup_link_unique)
    file.flush()
    file.close
```
Before passing into set object:
<a href="https://www.census.gov/en.html" onfocus="CensusSearchTypeahead.onSearchFocusBlur(false);" tabindex="2">
<img alt="United States Census Bureau" class="uscb-nav-image" src="https://www.census.gov/etc/designs/census/images/USCENSUS_IDENTITY_SOLO_White_2in_TM.svg" title="U.S. Census Bureau"/>
</a>

After passing into a set object:
{'I', 'S', '\n', 'C', '>', 'u', '"', '-', 'i', 'Y', 'L', 'M', 'p', '.', 'c', ')', 'B', '2', 't', 'N', '<', ' ', 'b', 'w', 'e', 'E', '/', 'O', ':', 'U', 'x', 'o', 'W', 'f', '(', 'l', 'D', 'F', 'g', 'd', '_', '=', 'n', 's', 'h', 'a', 'T', 'v', 'r', ';', 'm', 'y'}

【问题讨论】:

  • 变量soup_link 是一个字符串,你可以使用soup_link = soup_link[-1],它是一个字符串,它只获取字符串的最后一个字符。因此,为什么当你设置命令时,它每次只比较一个字母,并且永远是唯一的。至少,从代码来看是这样的。

标签: python python-3.x beautifulsoup duplicates


【解决方案1】:

for循环之前创建一个集合,并使用add()方法将新元素添加到集合中:

soup_link_unique = set()

for link in soup.find_all('a', attrs={'href': re.compile("^http")}):    
    soup_link = str(link)
    if soup_link.endswith('/') or soup_link.endswith('#'):
        soup_link = soup_link[-1]   
    soup_link_unique.add(soup_link)

示例:

my_set = set('ABCDE')
print(my_set)
# {'E', 'D', 'C', 'B', 'A'}

vs

my_set = set()
my_set.add('ABCDE')
print(my_set)
# {'ABCDE'}

【讨论】:

  • 谢谢,我试试这个。
猜你喜欢
  • 1970-01-01
  • 2013-01-17
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
  • 2015-05-28
  • 2013-06-01
  • 1970-01-01
相关资源
最近更新 更多