Не удается найти класс div во время веб-скрапинга на Python с использованием селена - PullRequest
1 голос
/ 25 марта 2020

В предисловии я скажу, что видел подобные вопросы, но ни одно из решений не помогло мне

Поэтому я ищу определенный класс c на моей странице html, но я всегда получаю значение None. Я видел несколько постов, описывающих ту же проблему, но ни одно из решений не помогло мне. Вот мои попытки - я ищу теги игрока с их именами, т.е. 'Chase Young'

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
import requests

url = "https://www.nfl.com/draft/tracker/prospects/allPositions?
college=allColleges&page=1&status=ALL&year=2020"

soup = BeautifulSoup(url.content, 'lxml')
match = soup.find('div', class_ = 'css-gu7inl')
print(match)
# Prints None

Я попробовал другой метод, чтобы найти совпадение, но все еще вернул None:

match = soup.find("div", {"class": "css-gu7inl"} # Print match is None

Похоже, что файл html не содержит всю веб-страницу, поэтому я попытался использовать селен, как я рекомендовал в аналогичном сообщении, и все равно ничего не получил:

driver = webdriver.Chrome("chromedriver")
driver.get(url)
soup = BeautifulSoup(driver.page_source, 'lxml')
items=soup.select(".css-gu7inl")
print(items) # Empty list

Что я здесь не так делаю?

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

Данные отображаются с помощью сценариев java, поэтому вызовите WebDriverWait () и дождитесь, пока элемент будет видим, используя visibility_of_all_elements_located ()

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup

url='https://www.nfl.com/draft/tracker/prospects/allPositions?college=allColleges&page=1&status=ALL&year=2020'
driver = webdriver.Chrome()
driver.get(url)
WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,'.css-gu7inl')))
soup = BeautifulSoup(driver.page_source, 'lxml')
items=soup.select(".css-gu7inl")
Players=[item.select_one('a.css-1fwlqa').text for item in items]
print(Players) 

Вывод :

['chase young', 'jeff okudah', 'derrick brown', 'isaiah simmons', 'joe burrow', "k'lavon chaisson", 'jedrick wills', 'tua tagovailoa', 'ceedee lamb', 'jerry jeudy', "d'andre swift", 'c.j. henderson', 'mekhi becton', 'mekhi becton', 'patrick queen', 'henry ruggs iii', 'henry ruggs iii', 'javon kinlaw', 'laviska shenault jr.', 'yetur gross-matos']
0 голосов
/ 25 марта 2020

Код номер один помогает вам увидеть ответ от сервера. Этот ответ содержит код HTML, отправленный сервером. Проанализируйте ответ (HTML код с сервера) этого кода с другим кодом и выделите нужный класс.

==================== ==============================

import requests #CODE1
from requests_toolbelt.utils import dump

resp = requests.get('http://kanoon.ir/')
data = dump.dump_all(resp)
print(data.decode('utf-8')) 

=========== ===============================================

Вывод кода : HTML код:

< GET / HTTP/1.1

< Host: kanoon.ir

< User-Agent: python-requests/2.23.0

< Accept-Encoding: gzip, deflate

< Accept: */*

< Connection: keep-alive

< 
     ...

================================== ================

Код, который вы пишете для второй части (для анализа и HTML разделение кода), зависит от вашего творчества.

...