Я написал скрипт, использующий scrapy
в сочетании с selenium
для анализа названия CEO
различных компаний с веб-страницы.Вы можете найти названия различных компаний на целевой странице.Тем не менее, вы можете получить имя CEO
, щелкнув по названию ссылки на компанию.
Следующий скрипт может анализировать ссылки разных компаний и использовать эти ссылки для очистки имен CEO
'S, за исключением второй компании. Когда скрипт пытается проанализировать имя CEO
по ссылке второй компании, он встречает stale element reference error
.Сценарий правильно выбирает остальные результаты, даже когда встречает эту ошибку по пути. Еще раз - он выдает только ошибку при разборе информации, используя вторую ссылку компании.Как странно !!
Ссылка на веб-страницу
Это то, что я пробовал до сих пор:
import scrapy
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class FortuneSpider(scrapy.Spider):
name = 'fortune'
url = 'http://fortune.com/fortune500/list/'
def start_requests(self):
self.driver = webdriver.Chrome()
self.wait = WebDriverWait(self.driver,10)
yield scrapy.Request(self.url,callback=self.get_links)
def get_links(self,response):
self.driver.get(response.url)
for item in self.wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '[class*="searchResults__title--"]'))):
company_link = item.find_element_by_css_selector('a[class*="searchResults__cellWrapper--"]').get_attribute("href")
yield scrapy.Request(company_link,callback=self.get_inner_content)
def get_inner_content(self,response):
self.driver.get(response.url)
chief_executive = self.wait.until(EC.presence_of_element_located((By.XPATH, '//tr[td[.="CEO"]]//td[contains(@class,"dataTable__value--")]/div'))).text
yield {'CEO': chief_executive}
Это типРезультаты, которые я получаю:
Jeffrey P. Bezos
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
(Session info: chrome=76.0.3809.132)
Darren W. Woods
Timothy D. Cook
Warren E. Buffett
Brian S. Tyler
C. Douglas McMillon
David S. Wichmann
Randall L. Stephenson
Steven H. Collis
and so on------------
Как исправить ошибку, с которой сталкивается мой скрипт при работе со второй ссылкой компании?
PS Я могу использовать их API, чтобы получить всю информацию, но мне любопытно узнать, с чем связана эта странная проблема с вышеуказанным сценарием.