Как остановить печать статей дважды с BeautifulSoup - PullRequest
2 голосов
/ 11 мая 2019

Я пытаюсь напечатать каждую ссылку на статью с этого сайта, и ссылки на статьи печатаются дважды, и только 5 из них печатаются.

Я попытался увеличить свой диапазон до (1,20), что напечатало все десять ссылок на статьи, но каждую из них дважды.

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'}))

Я ожидаю, что результатом будет 10 ссылок на статьи, и ни одна из них не будет повторяться.

Ответы [ 3 ]

1 голос
/ 11 мая 2019

Вы можете использовать css selector .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)
0 голосов
/ 11 мая 2019

Вы можете использовать метод ниже, работает как шарм.

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 Ожидаемый результат такой же, как указано выше

0 голосов
/ 11 мая 2019

Попробуйте напечатать свой суп и посмотрите, как в каждой итерации есть 2 ссылки и они одинаковы.Следовательно, он печатает дважды.

взять набор и поставить все str(data)

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

print(a) 
...