Ваш первый элемент в цикле следующий: <a id="top"></a>
.Этот тег не имеет атрибута href и используется исключительно как якорь для ссылок «возврат на верх страницы».Когда вы звоните links = link.get('href')
, результат равен links = None
.Возникает исключение, когда вы пытаетесь вызвать None[0:4]
.
. Для отладки просто напечатайте значение переменной непосредственно перед тем, как произойдет ошибка, и должно быть ясно, что links
не то, что вы ожидали.
Исправив это, есть ошибка в срезе.Из строки извлекаются только первые 4 символа, а не 5, поэтому он всегда будет ложным.Используйте href[0:5]
или href[:5]
для извлечения первых 5 символов (правая конечная точка является исключительной).На мой взгляд, использование string.startswith(substr)
является более семантически точным, чем нарезка.Наконец, последний тест в условном links != "#"
является избыточным и может быть опущен.Если это правда, что строка начинается с "/wiki"
, нет шансов, что она также будет равна "#"
.
Вот обновленная версия, которая проверяет, что links
правдива, прежде чем пытаться нарезать ее.Обратите внимание, что я обновил несколько имен переменных, чтобы улучшить семантическую точность, добавил вертикальный интервал и удалил лишние скобки вокруг строки.
from bs4 import BeautifulSoup
import requests
url = "https://en.wikipedia.org/wiki/Kashmir"
response = requests.get(url)
page_soup = BeautifulSoup(response.content, "html.parser")
for link in page_soup.find_all('a'):
href = link.get('href')
if href and href.startswith('/wiki'):
print("https://en.wikipedia.org/wiki" + href)
Выходной отрывок (всего 1103 ссылки):
...
https://en.wikipedia.org/wiki/wiki/Line_of_Control
https://en.wikipedia.org/wiki/wiki/Tourism_in_Jammu_and_Kashmir
https://en.wikipedia.org/wiki/wiki/United_Nations_Military_Observer_Group_in_India_and_Pakistan
https://en.wikipedia.org/wiki/wiki/Indian_Armed_Forces_and_the_Jammu_and_Kashmir_Floods,_2014
https://en.wikipedia.org/wiki/wiki/Peacebuilding_in_Jammu_and_Kashmir
https://en.wikipedia.org/wiki/wiki/Human_rights_abuses_in_Jammu_and_Kashmir
https://en.wikipedia.org/wiki/wiki/Crowd_control_in_Jammu_and_Kashmir
https://en.wikipedia.org/wiki/wiki/Women%27s_rights_in_Jammu_and_Kashmir
https://en.wikipedia.org/wiki/wiki/Template:Territorial_disputes_in_East,_South,_and_Southeast_Asia
https://en.wikipedia.org/wiki/wiki/Template_talk:Territorial_disputes_in_East,_South,_and_Southeast_Asia
https://en.wikipedia.org/wiki/wiki/Bhutanese_enclaves
https://en.wikipedia.org/wiki/wiki/Bhutan
https://en.wikipedia.org/wiki/wiki/China
https://en.wikipedia.org/wiki/wiki/Taiwan
...