Как очистить атрибуты href 10 лучших клипов из https://www.twitch.tv/directory/game/Overwatch/clips?range=7d, используя Selenium и Python - PullRequest
1 голос
/ 23 декабря 2019

У меня возникла постоянная проблема во время веб-обработки получения пустой строки вместо ожидаемых результатов (основываясь на html страницы проверки).

Моя конкретная цель - получить ссылку на первые 10 клипов отhttps://www.twitch.tv/directory/game/Overwatch/clips?range=7d.

Вот мой код:

# Gathers links of clips to download later

import bs4
import requests
from selenium import webdriver
from pprint import pprint
import time
from selenium.webdriver.common.keys import Keys


# Get links of multiple clips by webscraping main_url

main_url = 'https://www.twitch.tv/directory/game/Overwatch/clips?range=7d'
driver = webdriver.Firefox()
driver.get(main_url)
time.sleep(10)
elements_found = driver.find_elements_by_class_name("tw-interactive tw-link tw-link--hover-underline-none tw-link--inherit")
print(elements_found)

driver.quit()

Так я определился с именем класса

Страница используетJavascript, и именно поэтому я использую Selenium вместо модуля Requests (который я пытался, но безуспешно).

Я добавил time.sleep (10), чтобы у меня было время прокручивать веб-страницу. активировать java-скрипт, но безрезультатно.

Я также пытался изменить user-agent и использовать XPath, но ни один из них не дал других результатов.

Независимо от того, что я делаю, этоКажется, что программа смотрит только на необработанный HTML-код, который можно найти, щелкнув правой кнопкой мыши -> проверить исходный код страницы.

Любая помощь и указатели будут высоко оценены, я полностью застрял в этой проблеме. У меня были эти проблемы во всех проектах «Глава 11: Webscraping» от Automate the Boring Stuff, и в моих личных проектах.

1 Ответ

0 голосов
/ 23 декабря 2019

find_elements_by_class_name получает только один класс в качестве параметра, поэтому elements_found - пустой список. Например

find_elements_by_class_name('tw-interactive')

Вы используете 4 класса. Для этого используйте css_selector

elements_found = find_elements_by_css_selector('.tw-interactive.tw-link.tw-link--hover-underline-none.tw-link--inherit')

Или явно

elements_found = find_elements_by_css_selector('[class="tw-interactive tw-link tw-link--hover-underline-none tw-link--inherit"]')

Для получения атрибутов href от элементов используйте get_attribute()

for element in elements_found:
    element.get_attribute('href')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...