Для цикла печатает 3 на ссылку -Python / BeautifulSoup

#python #for-loop #beautifulsoup

#python #цикл for #beautifulsoup

Вопрос:

У меня есть простой цикл for, он запускается, но он печатает каждую ссылку 3 раза. Почему? (всего на странице 3 «события»)

Веб-сайт, с которого я пытаюсь очистить = https://www.aacr.org/get-involved/events /

Вот код ->

 import requests
from bs4 import BeautifulSoup
import pandas as pd

productlinks = []
url='https://www.aacr.org/get-involved/events/'
r=requests.get(url)
soup=BeautifulSoup(r.content,'html.parser')
productlist=soup.find_all('article',class_='event')
for item in productlist:
    for link in item.find_all('a',href=True):
        productlinks.append(link['href'])
print(productlinks)

Any insights on how i can make it run 1 per link
  

Комментарии:

1. Каков ожидаемый результат?

2. 1 URL на ссылку. в настоящее время он печатает каждую ссылку 3 раза

3. Хорошо… Ознакомьтесь с моим решением.

Ответ №1:

Измените последний цикл for на этот:

 for item in productlist:
    productlinks.append(item.a['href'])
  

Комментарии:

1. Изменено на это — для элемента в списке продуктов: productlinks = item . a[‘href’] productlinks.append(ссылка[‘href’]) печать(productlinks) Он не запускается?

2. Не делайте всего этого. Удалите последний цикл for и просто добавьте эти 2 строки в свой код. Другие строки не нужны. Это обязательно должно сработать.

3. Да, как мне это сделать? Также можете ли вы объяснить элемент. a[‘href’]) Что такое (точка. «A»)?

4. Хорошо… На самом деле это просто. список продуктов содержит все теги статей, поэтому я просто просматриваю его. item является одним из элементов в productlist, поэтому он должен быть одним тегом article . Тег article содержит тег a, поэтому к тегу a можно просто получить доступ с помощью точки. Затем [‘href’] получает атрибут href тега a. Итак, подводя итог, пункт. a[‘href’] возвращает атрибут href тега a в теге article.