Как с BeautifulSoup получить ссылки с веб-страницы, сохранить их в списке, а затем распечатать определенную? Вот что у меня есть на данный момент:

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("https://example.com/")
content = BeautifulSoup(html.read(), "html.parser")
for link in content.find_all("a"):
    print(link.get("href")[0])

Но я получаю такую ​​ошибку: TypeError: 'NoneType' object is not subscriptable Как решить эту проблему и получить первую ссылку?

1
Alen 24 Фев 2021 в 23:38

2 ответа

Лучший ответ

Чтобы получить все ссылки со страницы, используйте регулярное выражение.

Следующий код должен сделать это для вас:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re

html = urlopen("https://www.stmaryottumwa.org/")
content = BeautifulSoup(html.read(), "html.parser")
links = []

for link in content.find_all("a", attrs={'href': re.compile("^http")}):
    links.append(link.get("href"))

print(links[0]) # print first link on page

Переменные ссылки будут содержать все ссылки на странице.

2
0x435d2d 24 Фев 2021 в 21:09

Чтобы получить атрибуты элемента, вам необходимо получить доступ к dict .attrs. Также имейте в виду, что иногда теги a вообще не имеют атрибута href, вы можете обойти это, используя .get:

link.attrs.get('href')

Я не уверен, что вы ожидали от [0], поскольку тег a может иметь только один атрибут href. Используя [0], вы получите первый символ атрибута href.

for link in content.find_all("a"):
    href = a.attrs.get('href')
    if href:
        print(href[0])
2
DeepSpace 24 Фев 2021 в 20:51