Как вытащить название ссылки из href?
Есть сайт со списком фильмов, название каждого - ссылка. Как спарсить само название если оно находится в href?
import requests
from bs4 import BeautifulSoup as bs
headers = {'accept': accept,'user-agent':user-agent}
base_url = url
def parse (base_url, headers):
session = requests.Session()
request = session.get(base_url, headers = headers)
if request.status_code == 200:
soup = bs(request.content, 'html.parser')
divs = soup.find_all('div', attrs = {'class': 'lister-item mode-
advanced'})
for div in divs:
name = div.find('a', attrs = {'href': ???}).text
print(name)
else:
print('ERROR')
parse(base_url, headers)
Для наглядности, выглядит это вот так:

Ответы (1 шт):
Автор решения: Евгений
→ Ссылка
Если нужно парсить содержимое (текст) ссылки
Попробуйте вот такое решение, основанное на возможности BS возвращать список объектов, который соответствует универсальному селектору.
import requests
from bs4 import BeautifulSoup as bs
headers = {'accept': accept,'user-agent':user-agent}
base_url = url
def parse (base_url, headers):
session = requests.Session()
request = session.get(base_url, headers = headers)
if request.status_code == 200:
soup = bs(request.content, 'html.parser')
divs = soup.select('div.lister-item.mode-advanced')
for div in divs:
links = div.select('a') # читать примечание после кода
name = links[0].text if links else '' # если в div этого типа может быть только одна ссылка (если их больше - остальные проигнорируются)
# name = ', '.join([link.text for link in links]) # если в div этого типа может быть несколько ссылок, так можно получить все их названия через запятую
# name = [link.text for link in links] # а вот так можно получить все названия всех ссылок, но уже в виде списка
else:
print('ERROR')
parse(base_url, headers)
Примечание:
Если нужно выбирать какие-то конкретные ссылки (например, только начинающиеся с https://), можно также преобразовать селектор таким образом:
...
links = div.select('a[href^="https://"]')
...
Подробнее о селекторах по атрибутам можно почитать тут
Если нужно парсить адрес ссылки
Как спарсить само название если оно находится в href?
Если же вы всё-таки имели в виду парсинг href, то ссылку можно получать следующим образом:
import requests
from bs4 import BeautifulSoup as bs
headers = {'accept': accept,'user-agent':user-agent}
base_url = url
def parse (base_url, headers):
session = requests.Session()
request = session.get(base_url, headers = headers)
if request.status_code == 200:
soup = bs(request.content, 'html.parser')
divs = soup.find_all('div', attrs = {'class': 'lister-item mode-advanced'})
for div in divs.find_all('a', href=True):
name = div['href']
print("Найдена ссылка:", name)
else:
print('ERROR')
parse(base_url, headers)