我已经使用selenium
和find_element_by_xpath
从网页中提取了一些文本。我已经设法在笔记本电脑上成功运行此功能。但是,我需要在Google Colab中运行代码
因此我无法使用硒(Colab中没有Firefox或Chrome,并且出现了有意义的geckodriver错误)。 lxml
看起来很有前途,我已经设法使它适用于两个价值观,但是
提取的html中没有某些值(很奇怪),因此返回的字符串为空。
根据以下SO答案:Python lxml - returns null list,将x路径中的“ tbody”拖放到一个实例中很有帮助,但是像游戏日期这样的几个单元格又恢复为空。
使用硒(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的工作会为某些值(来自CHROME的XPATH)返回NULL
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提供硒所提供的吗?
答案 0 :(得分:1)
那是因为页面源td
中带有@id="utime"
的页面实际上是空的。该值来自script
节点中声明的变量,看起来像var game_utime = 1495375200;
。这不是 Epoch时间,可以将其转换为人类日期和时间 May 21, 2017 5:00:00 PM
。
您可以使用正则表达式解析script
节点并提取时期,然后将其转换为以下所需格式
import time
import requests
from lxml import html
import re
pageContent = requests.get(URL).text
epoch_time = re.search('var game_utime = (\d+);', pageContent).group(1)
date = time.strftime('%d-%m-%Y %H:%M', time.localtime(int(epoch_time)))
print(date)
# 21-05-2017 17:00