как получить список участников с помощью beautifulsoup

#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. Пожалуйста, рассмотрите возможность утверждения ответа, если это помогло 🙂