Не могу добавить ссылку к строке через "+"
Есть сайт.
Есть код:
all_a = soup.find("ul", class_="projects clearfix pagination-item").find_all("a")
for item in all_a:
item_url = "https://m-strana.ru" + item.get("href")
print(item_url)
И ошибка:
https://m-strana.ru/brands/lider-dach/
https://m-strana.ru/brands/lider-dach/
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-35-6a40592ec927> in <module>
1 all_a = soup.find("ul", class_="projects clearfix pagination-item").find_all("a")
2 for item in all_a:
----> 3 item_url = "https://m-strana.ru" + item.get("href")
4 print(item_url)
TypeError: can only concatenate str (not "NoneType") to str
Не пойму, в чем подвох?
До этого работало без ошибок. Работает, если убрать https://m-strana.ru.
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
С текущей выборкой вам попался <a> без href
<a class="comparision" data-id="25061"><svg class="icon" xmlns="http://www.w3.org/2000/svg"><use xlink:href="/bitrix/templates/ms_2018/img/icons.svg#comparision"></use></svg></a>
Я бы использовал css-селектор, а ссылку объединял через urljoin и взяв у самого сайта - т.к. сайт мог сделать редирект и в итоге ссылка стала бы другой
Пример:
from urllib.parse import urljoin
import requests
from bs4 import BeautifulSoup
url = 'https://m-strana.ru/brands/karkasnaya-tekhnologiya/'
rs = requests.get(url)
soup = BeautifulSoup(rs.content, 'html.parser')
all_a = soup.select(".projects.clearfix.pagination-item a[href]")
for item in all_a:
item_url = urljoin(rs.url, item.get("href"))
print(item_url)
Еще, я заметил, что ссылки там повторяются. Можно ограничить выбор, например, уточнив css-селектор, чтобы найти те <a>, у которых есть класс main-link:
all_a = soup.select(".projects.clearfix.pagination-item a[href].main-link")
