使用带有::before的CSS选择器进行抓取不显示文本

问题描述 投票:0回答:1

我正在尝试使用 scrapy 从

this
eBay 列表中删除 Monday, 9:30 AM

来自 scrapy shell

scrapy shell https://www.ebay.com/itm/145599690533?
:

>>> response.css('span.ux-timer__time-left::text')
[]

我还尝试从 Firefox Dev 复制 css 路径和 xpath,但他们给出了相同的结果。

我怀疑这个问题与明文之前的

::before
有关,但我对此几乎一无所知。

我错过了什么?

python css web-scraping scrapy css-selectors
1个回答
0
投票

事实上,你并没有错过任何东西。您的元素选择是正确的,但 scrapy shell 没有得到任何结果,因为该值是由 javaScript 填充的,而 scrapy 无法模仿它。

举个例子,你的 css 选择正在使用 selenium 和 beautifulsoup 一起工作:

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
#chrome to stay open
options.add_experimental_option("detach", True)

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)

driver.get("https://www.ebay.com/itm/145599690533?")
time.sleep(5)

soup = BeautifulSoup(driver.page_source, 'lxml')
date = soup.select_one('span.ux-timer__time-left').get_text()
print(date)
© www.soinside.com 2019 - 2024. All rights reserved.