Соскоб Python удалить дубликаты - PullRequest
0 голосов
/ 09 октября 2018

Я не хочу иметь адрес электронной почты дважды, с этим кодом я получаю ошибку TypeError: unhashable type: 'list' Так что я предполагаю, что строка allLinks = set () неверна, и я должен использовать кортеж, а несписок, это верно?

Вот мой код:

import requests
from bs4 import BeautifulSoup as soup
def get_emails(_links:list):

for i in range(len(_links)):
 new_d = soup(requests.get(_links[i]).text, 'html.parser').find_all('a', {'class':'my_modal_open'})
 if new_d:
   yield new_d[-1]['title']


start = 20
while True:
d = soup(requests.get('http://www.schulliste.eu/type/gymnasien/?bundesland=&start={page_id}'.format(page_id=start)).text, 'html.parser')
results = [i['href'] for i in d.find_all('a')][52:-9]
results = [link for link in results if link.startswith('http://')]



next_page=d.find('div', {'class': 'paging'}, 'weiter')

if next_page:

    start+=20

else:
    break

allLinks= set() 

if results not in allLinks:


    print(list(get_emails(results)))

    allLinks.add(results)

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

У меня все получилось, но я все еще получаю дубликаты писем.

    allLinks = []

if results not in allLinks:


    print(list(get_emails(results)))

    allLinks.append((results))

Кто-нибудь знает почему?

0 голосов
/ 09 октября 2018

Вы пытаетесь добавить весь список электронных писем в виде одной записи в set.

. Вы хотите добавить фактические электронные письма, каждое в отдельную запись set.

Проблема в этой строке:

allLinks.add(results)

Добавляет весь список results как один элемент в set, и это не работает.Используйте это вместо:

allLinks.update(results)

Это обновит set с элементами из list, но каждый элемент будет отдельной записью в set.

...