2 votes

Comment empêcher les articles d'être imprimés deux fois avec BeautifulSoup

J'essaie d'imprimer chaque lien d'article de ce site web et les liens d'article s'impriment deux fois et seulement 5 d'entre eux.

J'ai essayé d'augmenter ma plage à (1,20), ce qui a permis d'imprimer les dix liens d'articles, mais chacun d'entre eux deux fois.

from bs4 import BeautifulSoup
from urllib.request import urlopen

url = urlopen("https://www.politico.com/newsletters/playbook/archive")
target = 'C:/Users/k/Politico/pol.csv'

content = url.read()

soup = BeautifulSoup(content,"lxml")

for article in range (1,10):
    #Prints each article's link and saves to csv file
    print(soup('article')[article]('a',{'target':'_top'}))

Je m'attends à ce que le résultat soit constitué de 10 liens d'articles dont aucun ne se répète.

1voto

QHarr Points 24420

Vous pouvez utiliser le sélecteur css .front-list h3 > a

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.politico.com/newsletters/playbook/archive#')
soup = bs(r.content, 'lxml')
links = [link['href'] for link in soup.select('.front-list h3 > a')]
print(links)

0voto

Gourav Bansal Points 69

Essayez d'imprimer votre soupe et voyez comment, à chaque itération, il y a 2 liens qui sont les mêmes. Par conséquent, elle s'imprime deux fois.

prendre un set et mettre tous les str(data)

a = set()
for article in range (1,20):
    a.add((str(soup('article')[article]('a',{'target':'_top'}))))

print(a)

0voto

Muhika Thomas Points 128

Vous pouvez utiliser la méthode ci-dessous, qui fonctionne à merveille.

from bs4 import BeautifulSoup
from urllib.request import urlopen

url = urlopen("https://www.politico.com/newsletters/playbook/archive")
target = 'C:/Users/k/Politico/pol.csv'
content = url.read()
soup = BeautifulSoup(content,"lxml")

articles = soup.findAll('article', attrs={'class':'story-frag format-l'})

for article in articles:
    link = article.find('a', attrs={'target':'_top'}).get('href')
    print(link)

enter image description here Le résultat attendu est le suivant

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X