Есть сайт со списком фильмов, название каждого - ссылка. Как спарсить само название если оно находится в 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)
Для наглядности, выглядит это вот так:
Попробуйте вот такое решение, основанное на возможности 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)
Источник
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Требуется замерить программу с высокой точностью и не через библиотеку Chrono, так как требуется строгая мерка выполнения подключаемой библиотеки...
Понадобилось написать программу, выполняющую функцию подобно утилите Linux - lsusbВывод должен быть похож на:
Есть структура _dem_ram_data_Она должна занимать в памяти 16 байт, но я получаю 21 байт