#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.