Как извлечь значение атрибута datetime в тег времени, используя селектор xpath или css в python? - PullRequest
1 голос
/ 03 июня 2019

Мне нужно извлечь дату проверки из атрибута datetime тега в документе HTML.

Я пытался использовать различные варианты селекторов xpath и css для достижения этой цели, но они возвращают пустые строки.

тег HTML выглядит следующим образом:

<time class="review-date--tooltip-target" datetime="2013-10-09T13:47:14.000Z" title= "Wednesday, 9 October 2013, 13:47:14">9 Oct 2013</time>

и вот мой селектор xpath и css:

xpath('//time[@class="review-date--tooltip-target"]')

css('time.review-date--tooltip-target')

мне помогут два исхода:

1- extract the value of the `datetime` attribute

2- extract the text `9 Oct 2013` within the time tag

Ответы [ 3 ]

2 голосов
/ 03 июня 2019

Для Scrapy вам нужно:

datetime = response.xpath('//time[@class="review-date--tooltip-target"]/@datetime').extract_first()
time = response.xpath('//time[@class="review-date--tooltip-target"]/text()').extract_first()
2 голосов
/ 03 июня 2019

Чтобы получить атрибут datetime, выражение xpath

//time[@class="review-date--tooltip-target"]/@datetime

выходы

2013-10-09T13:47:14.000Z

Чтобы получить текст даты в теге времени, выражение xpath

//time[@class="review-date--tooltip-target"]/text()

1010 * выходы *

9 Oct 2013
1 голос
/ 03 июня 2019

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

print(driver.find_element_by_xpath("//time[@class='review-date--tooltip-target']").text)
print(driver.find_element_by_xpath("//time[@class='review-date--tooltip-target']").get_attribute("datetime"))

Вывод:

9 Oct 2013
2013-10-09T13:47:14.000Z

Или Вы можете вызвать WebdriverWait

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
element=WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//time[@class='review-date--tooltip-target']")))
print(element.text)
print(element.get_attribute("innerHTML"))
print(element.get_attribute("datetime"))

ИЛИ Вы можете попробовать python Beautifulsoup для удаления.

from selenium import webdriver
from bs4 import BeautifulSoup
driver=webdriver.Chrome()
driver.get("URL")
html=driver.page_source
soup=BeautifulSoup(html,'html.parser')
print(soup.find('time').text)
print(soup.find('time')['datetime'])

Используя селектор scrapy, попробуйте что .get () вернет первое совпадение, если есть несколько совпадений, попробуйте использовать getall()


Datetimeval = response.css('time::attr(datetime)').get()
Textval = response.css('time::text').get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...