Я использовал selenium
и find_element_by_xpath
для извлечения текста из веб-страниц.Мне удалось заставить это работать успешно на моем ноутбуке.Однако мне нужно запустить код в Google Colab, и поэтому я не могу использовать селен (в Colab нет Firefox или Chrome, и я получаю ошибку geckodriver, которая имеет смысл).lxml
выглядит многообещающе, и мне удалось заставить его работать над парой значений, но некоторые значения просто отсутствуют в извлеченном html (странном), и поэтому возвращаемая строка пуста.
Удаление tbody в одном из xpath помогло в одном случае, согласно этому SO-ответу: Python lxml - возвращает нулевой список , но есть пара ячеек, например дата игрыкоторые возвращаются пустыми.
ЭТО РАБОТАЛО НА НОУТБУКЕ С СЕЛЕНОМ (XPATHS ОТ FIREFOX):
from selenium import webdriver
URL = 'https://www.soccer24.com/match/C4RB2hO0/#match-summary'
browser = webdriver.Firefox()
browser.get(URL)
Selenium_TeamA_working = browser.find_element_by_xpath('/html/body/div[1]/div[1]/div[2]/table/tbody/tr/td[2]/table/tbody/tr[1]/td[1]/span/a').text
print('Team A using selenium: ' + Selenium_TeamA_working)
ЭТОТ ВИД РАБОТЫ С LXML, НО ВОЗВРАЩАЕТ НУЛЬ ДЛЯ НЕКОТОРЫХ ЗНАЧЕНИЙ (XPATHS ИЗ ХРОМА)
import requests
from lxml import html
pageContent=requests.get(URL)
tree = html.fromstring(pageContent.content)
print(pageContent.content) #just to check the html string
TeamA_broken = tree.xpath('//*[@id="flashscore_column"]/table/tbody/tr[1]/td[1]/span/a/text()') #get Team A: this does not work
print('Team A using lxml (empty): ' + TeamA_broken) #output []
TeamA_working = tree.xpath('//*[@id="flashscore_column"]/table/tr[1]/td[1]/span/a/text()') #get Team A: drop tbody and then it works
print('Team A using lxml (working): ' + TeamA_working) #output ['Hull']
Date_notworking = tree.xpath('//*[@id="utime"]/text()') #this does not work and the game date is empty in the html
print('Game date using lxml (empty): ' + Date_notworking) #output []
Могу ли я получить lxml, чтобы предоставить то, что у меня было с селеном?