Python Selenium刮取不一致的字段

2024-09-29 19:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我从一个网站上抓取一些数据,有时他们会显示milage,有时他们会在车辆描述中显示MPG 这是HTML

我使用的是xpath,只需按顺序进行

相关部分如下:

    def init_driver():
    options = webdriver.ChromeOptions()
    options.binary_location = '/usr/bin/google-chrome-stable'
    options.add_argument('headless')
    options.add_argument('window-size=1200x600')
    driver = webdriver.Chrome(chrome_options=options)
    driver.wait = WebDriverWait(driver, 5)
    return driver


def scrape(driver):

    #Tymm = year make model All three attributes are in the Header, Parse and separate before insterting to SQL
    ymm_element = driver.find_elements_by_xpath('//*[@id="compareForm"]/div/div/ul/li/div/div/h3')
    engine_element = driver.find_elements_by_xpath('//*[@id="compareForm"]/div/div/ul/li/div/div/div[3]/dl[1]/dd[1]')
    trans_element = driver.find_elements_by_xpath('//*[@id="compareForm"]/div/div/ul/li/div/div/div[3]/dl[1]/dd[2]')
    milage_element = driver.find_elements_by_xpath('//*[@id="compareForm"]/div/div/ul/li/div/div/div[3]/dl[1]/dd[3]')

由于元素的顺序对于所有车辆都不相同,所以我需要编写它,以便它能够检索到我想要的标题之后的文本。在

以下是从元素检查中复制chrome上的HTML之后的HTML:

^{pr2}$

基本上,我需要搜索标题后面的文本,而不是给xpath编号。在

我的年份和型号都在同一个元素”标签上,你能给我指出正确的方向吗?还是建议你用一个图书馆的平头


Tags: dividbyhtmldriverlielementselement
1条回答
网友
1楼 · 发布于 2024-09-29 19:24:41

首先,使用xpath可以使用contains,如下所示:

driver.find_elements_by_xpath('//dt[contains(text(),'Engine')]')

它看起来更干净,更容易使用,更坚固。在

第二,阅读xpath跟随同级、前置同级、父级和祖先。它将帮助您构建简洁的xpath定位器:

^{pr2}$

无论您的html元素位于哪个顺序,上面的xpath都可以工作。在

相关问题 更多 >

    热门问题