#python #selenium #beautifulsoup
#python #селен #beautifulsoup
Вопрос:
Я пытался сделать это
URL=str(browser.current_url)
page=requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")
imena = soup.findAll('a', class_='text-headline')
imena
Ответ №1:
Предполагая, что URL-адрес предназначен для вкладки участников Starva club Россия 2021, т. Е. https://www.strava.com/clubs/236545/members следующее должно сработать, чтобы получить доступ ко всем участникам на 193 страницах (вы действительно должны использовать API Strava …):
import time
from bs4 import BeautifulSoup
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
BASE_URL = "https://www.strava.com/clubs/236545/members?page="
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(f"{BASE_URL}{1}")
driver.find_element_by_id("email").send_keys("<your-email>")
driver.find_element_by_id("password").send_keys("<your-password>")
driver.find_element_by_id("login-button").click()
time.sleep(1)
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
num_pages = int(soup.find("ul", "pagination").find_all("li")[-2].text)
# Ignore the admins shown on each page
athletes = soup.find_all("ul", {"class": "list-athletes"})[1]
members = [
avatar.attrs['title']
for avatar in athletes.find_all("div", {"class": "avatar"})
if 'title' in avatar.attrs
]
for page in range(2, num_pages 1):
time.sleep(1)
driver.get(f"{BASE_URL}{page}")
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
athletes = soup.find_all("ul", {"class": "list-athletes"})[1]
for avatar in athletes.find_all("div", {"class": "avatar"}):
if 'title' in avatar.attrs:
members.append(avatar.attrs['title'])
# Print first 10 members
print('n'.join(m.strip() for m in members[:10]))
driver.close()
Вывод (первые 10 участников):
- Victor Koldaev - ♥LCHF Runners♥
Antonio Raposo ®️
Vadim Issin
"DuSenna🇧🇷 Vá com Garra e a Felicidade te Agarra 😉
#MIX MIX
#RunВасяRun ...
$ерЖ 🇷🇺 КЛИМoff
'Luis Fernando Osorio' MTB
( CE )Faisal ALShammary "حائل $الشرقية "
(# Monique #) bermudez
Комментарии:
1. и как я могу получить количество подписчиков каждого пользователя. я хочу создать dict с ключом =name_user и значением =follow.value_count
2. Вам нужно получить идентификатор откуда-то близко к тому месту, где я получил имя выше, и сохранить его в кортеже с именем. Затем перебирайте список кортежей, переходящих на страницу каждого пользователя спортсмена, чтобы найти подписчиков с этой страницы, например
https://www.strava.com/athletes/8239299
, и тогда вы сможете создавать dict по одному пользователю за раз.
Ответ №2:
Вам нужно сначала получить элементы div «text-headline», а затем перебрать каждый из них, чтобы получить привязанные ссылки.
URL=str(browser.current_url)
page=requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")
members = soup.findAll('div', {'class': 'text-headline'})
for (member in members):
name = member.find("a")
print(name.get_text())
Комментарии:
1. Пожалуйста, рассмотрите возможность утверждения ответа, если это помогло 🙂