Как получить несколько идентичных ссылок HREF из идентичных элементов - PullRequest
0 голосов
/ 06 марта 2020

Я собираю данные о занятиях фитнесом и записываю их в CSV-файл. На веб-странице я пытаюсь почистить название класса, описание, адрес, контактный номер, веб-сайт и социальные ссылки. Я использую BeautifulSoup и Selenium.

Вот ссылка на страницу: https://classpass.com/classes/stretch-london-ada-street/strong-flow-yoga/322325148#tabs? Search-id = 40447186987779531

Элементы выглядят как это:

<a class="_2MTzNd_HEKWjVL824SA9Li" href="https://instagram.com/stretch_london" 

Это одинаково для всех разных социальных сетей, с той лишь разницей, что URL-адрес внутри элемента.

Я смог использовать метод ниже, чтобы получить другие не href данные, которые я хочу со страницы, т.е. имя класса, описание и т. д. c. и напишите в csv:

        try:
            class_name = classses_soup.find('span', {'data-component': 'LocalizableMessage'}).text
        except (AttributeError, TypeError,) as e:
            pass

Однако я не могу получить ссылки href, я думаю, потому что они все являются идентичными элементами? Так, например, приведенный ниже код не работает - приведенная ниже выдержка предназначена для ссылки на Instagram, но у меня есть идентичная строка кода для facebook и twitter:

try:
    instagram = classses_soup.find('a', {'class': '_2MTzNd_HEKWjVL824SA9Li'}).a.href
except (AttributeError, TypeError, IndexError,) as e:
    pass

Это дает следующую ошибку:

NameError: name "class_wesbite" is not defined

Что я делаю не так и как я могу заставить свой код очищать каждую ссылку, чтобы я мог писать в csv, как это происходит с другими элементами?

1 Ответ

1 голос
/ 06 марта 2020

Привет ниже код получает ссылки на социальные сети в соответствии с вашей страницы: -

import requests
from bs4 import BeautifulSoup
from functools import partial  
from operator import is_not

links = []
filter_null = partial(filter, partial(is_not, None))

url = "https://classpass.com/classes/stretch-london-ada-street/strong-flow-yoga/322325148#tabs?search-id=40447186987779531"  # no trailing /
try:
    page = requests.get(url)

    soup = BeautifulSoup(page.text, 'html.parser')

    last_links = soup.find("div", {"id": "find-us-social-links"})

    artist_name_list_items = last_links.find_all('a')
    for artist_name in artist_name_list_items:

        links.append(artist_name.get('href'))
        L =list(filter_null(links))
    print(links)
except Exception as e:
    print(e)
    print("continuing....")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...