Соскоб с использованием Selenium и chromedriver в Python - PullRequest
0 голосов
/ 22 марта 2020

Я смотрю на эту страницу. Я пытаюсь использовать Селен и хромдрайвер для очистки этих данных (показано красным маркером):

enter image description here

Вот мой код Python:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep

chrome_options = Options()
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("disable-infobars")
driver = webdriver.Chrome(executable_path="/ABC/chromedriver", chrome_options=chrome_options)

driver.get("https://finance.yahoo.com/quote/IBM")
sleep(10)
estimated = driver.find_element_by_class_name("IbBox Ta(start) C($tertiaryColor)")

Но код не получает Est. Return и после долгого ожидания возвращает это сообщение об ошибке:

selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified

Что я делаю не так, что лучше и быстрее способ получить значение Est Return со страницы?

ОБНОВЛЕНИЕ: Вот что я вижу, если я использую проверяющий элемент в Chrome:

enter image description here

Ответы [ 3 ]

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

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

import requests
from bs4 import BeautifulSoup

link = "https://finance.yahoo.com/quote/IBM"

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}

r = requests.get(link,headers=headers)
soup = BeautifulSoup(r.text,"lxml")
est_return = soup.select_one("[class='Mb\(8px\)']").get_text()
print(est_return)
0 голосов
/ 22 марта 2020

Это сообщение об ошибке ...

selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified

... означает, что использованная вами стратегия Locator не является допустимым выражением.


Скрести текст -6% Est. Верните , вам нужно вызвать WebDriverWait для visibility_of_element_located(), и вы можете использовать следующую Стратегию локатора :

  • Использование XPATH:

    driver.get('https://finance.yahoo.com/quote/IBM')
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[text()='Near Fair Value']//following::div[1]/div"))).text)
    
  • Консольный вывод:

    -6% Est. Return
    
  • Примечание : необходимо добавить следующие операции импорта :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 22 марта 2020

Можете ли вы попробовать вместо этого XPath, он должен выглядеть следующим образом:

estimated = driver.find_element_by_xpath("*//div[@class='IbBox Ta(start) C($tertiaryColor)']").text()

Дайте мне знать, как это работает go! : D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...