Python 硒中的相对选择素?
我想知道Selenium中是否有像Scrapy中的Python 硒中的相对选择素?,python,selenium,xpath,scrapy,css-selectors,Python,Selenium,Xpath,Scrapy,Css Selectors,我想知道Selenium中是否有像Scrapy中的ele.css选择器那样的“相对”选择器。例如,在Scrapy中,可以执行以下操作: for li in response.css('ul.rows li p.result-info'): lnk = li.css('a::attr(href)').extract_first() prc = li.css('span.result-meta span.result-price::text').extract_first()
ele.css
选择器那样的“相对”选择器。例如,在Scrapy中,可以执行以下操作:
for li in response.css('ul.rows li p.result-info'):
lnk = li.css('a::attr(href)').extract_first()
prc = li.css('span.result-meta span.result-price::text').extract_first()
sqf = li.css('span.result-meta span.housing::text').extract_first()
loc = li.css('span.result-meta span.result-hood::text').extract_first()
objct = {
'lnk': lnk,
'prc': prc,
}
if sqf:
chunk = sqf.split()
objct['sqf'] = chunk[len(chunk)-1]
if loc:
objct['loc'] = loc
yield objct
在硒中可以做类似的事情吗?
现在我一直在使用下面的代码,这显然会产生问题,因为路径不相关。比如说,我不是一次一个项目地抓取每个项目的所有细节(即a项目的价格、尺寸、颜色,然后是B项目的价格、尺寸、颜色,然后是C项目的价格、尺寸、颜色等等),而是陷入困境?将所有项目的一个细节(即项目A、项目B和项目C的价格,然后是项目A、项目B和项目C的尺寸),如以下代码所示
discoverable_cards = browser.find_elements(By.XPATH, '//div[@class="discoverableCard"]')
product_type = browser.find_elements(By.XPATH, '//div[@class="discoverableCard-body"]/div[1]/span')
titles = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-title")]')
descriptions = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-description")]')
categories = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-category")]')
balances = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-balance")]')
currencies = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-currencyCode")]')
percentages = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-percent")]')
statuses = browser.find_elements(By.XPATH, '//span[contains(@class, "discoverableCard-formattedDate")] | //div[contains(@class, "discoverableCard-InDemandBottomLabel")]')
HTML的一个示例(以及我的意思的一个示例)
在上面的例子中,我想做的是,比如说,选择
discoverable card
(即discoverable_card=browser.find_元素(By.XPATH,//discoverable card'
),然后做进一步的选择:dc_child=discoverable_card.find_元素(By.XPATH,'relative/path/to/child'))
您只需选择已定义元素的子元素/子元素,如下所示:
discoverable_cards = browser.find_elements(By.XPATH, '//discoverable-card')
for card in discoverable_cards:
dc_child = card.find_element(By.XPATH, './relative/path/to/child')
请注意,您应该在child(
/
)/substant(/
)定位器的开头指定点,以指向当前卡
元素是否可以共享HTML(至少简化)和所需的输出?@Andersson可以说,我不是在寻找特定类型的输出。我在寻找一种方法来选择一个元素,然后选择与最初选择的元素相关的子元素,如果有意义的话?我可以定义一些HTML,请稍等,因为
选择了当前节点,correct?当您可以使用卡片
引用它时,使用/
有什么意义?如果要使用任何其他选择器,是的,它将与卡片一样工作。find_element()
,但是对于XPath,您还应该在上下文中指定点对点
discoverable_cards = browser.find_elements(By.XPATH, '//discoverable-card')
for card in discoverable_cards:
dc_child = card.find_element(By.XPATH, './relative/path/to/child')