maximkv25
@maximkv25
web-developer

Как искать несколько классов в теге, поиск по css селектору и xpath?

Добрый день, парсю Медиум и возникли сложности в этом деле.

Что использую
from selenium import webdriver
import requests


def md():
    url = 'https://medium.com/@Tacenda/the-universe-is-all-of-space-and-time-spacetime-and-its-contents-9-which-includes-planets-3c9a58475b14'

    driver = webdriver.PhantomJS(executable_path='/usr/local/lib/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs')
    driver.get(url)
    driver.implicitly_wait(5)

    # avatar = driver.find_element_by_css_selector('#_obv\2e shell\2e _surface_1498118264269 > div > main > article > footer > div.u-padding0.u-clearfix.u-backgroundGrayLightest.u-print-hide.supplementalPostContent.js-responsesWrapper > div > div > div.responsesStream.js-responsesStream > div > div > div > div > div.u-clearfix.u-marginBottom10 > div > div > div.postMetaInline-avatar.u-flex0 > a')
    # avatar = driver.find_element_by_xpath('//*[@id="_obv.shell._surface_1498118264269"]/div/main/article/footer/div[5]/div/div/div[4]/div/div/div/div/div[1]/div/div/div[1]/a')
    # avatar = driver.find_elements_by_class_name('link avatar u-baseColor--link')
    avatar = driver.find_elements_by_class_name('link')
    print([i.text for i in avatar])

md()

Все закомментированные строки выдают ошибку, что не могут найти данные параметры.
Селектор и xpath, скопированы с браузера.
Здесь вопрос почему нельзя найти тег, который содержит несколько классов?
В сети смотрел что добавляют .link.avatar, но это не помогло.
Искал класс в дом дереве
'link avatar u-baseColor--link' in driver.page_source

Возвращает true

Вот часть, которую мне нужно спарсить, а именно теги href и img src
<a class="link avatar u-baseColor--link" href="https://medium.com/@Tacenda" data-action="show-user-card" data-action-value="17f98bbae51d" data-action-type="hover" data-user-id="17f98bbae51d" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/36/36/1*Jtm9sTbkCLI_0A0AadvVzw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Adriano Celentano"></a>


До этого пользовался bs4, lxml, все было легко, пишешь тег, класс и вуаля, все найдено, обратился к атрибутам и достал.

Как здесь все верно сделать? Второй день делаю эту задачу.
  • Вопрос задан
  • 2031 просмотр
Решения вопроса 1
EreminD
@EreminD
Кое-что умею
.link.avatar.u-baseColor--link

вот такой CSS-селектор возвращает массив из 7 элементов
Возьмите любой (они же одинаковые). Считайте значения атрибута href и найдите в нем вложенный img

Есть простой способ подбирать CSS-селекторы:
  1. Находите элемент на странице
  2. ПКМ -> Inspect element
  3. откроется страница с исходным кодом. Будет выделен нужный элемент
  4. Посмотрите, как можно локаничн задать уникальный css-селектор
  5. Перейдите в консоль браузера
  6. Напишите "$$('ваш css-селектор')"
  7. Если возвращается массив с одним элементом - вы подобрали удобный селектор

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы