Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python抓取-具有多个条件的XPath语法_Python 3.x_Selenium_Xpath_Web Scraping - Fatal编程技术网

Python 3.x Python抓取-具有多个条件的XPath语法

Python 3.x Python抓取-具有多个条件的XPath语法,python-3.x,selenium,xpath,web-scraping,Python 3.x,Selenium,Xpath,Web Scraping,我正在编写一个简单的scraper从Kayak中提取航班价格-我正在使用XPath提取多个数据项(持续时间、航空公司、价格等),并将每个数据项存储在一个包含15个值的列表中(Kayak页面上的结果) 我的问题是,“price”变量scrape返回的值超过15个,因为除了“best”结果外,它还拉取其他显示的结果(参见屏幕截图-RHS上的大字体与底部LHS中的两个选项) 我已将问题缩小到以下方面: 1) 拉取这两个值的总体(工作)XPath是: '//a[@class="booking-link

我正在编写一个简单的scraper从Kayak中提取航班价格-我正在使用XPath提取多个数据项(持续时间、航空公司、价格等),并将每个数据项存储在一个包含15个值的列表中(Kayak页面上的结果)

我的问题是,“price”变量scrape返回的值超过15个,因为除了“best”结果外,它还拉取其他显示的结果(参见屏幕截图-RHS上的大字体与底部LHS中的两个选项)

我已将问题缩小到以下方面:

1) 拉取这两个值的总体(工作)XPath是:

'//a[@class="booking-link "]/span[@class="price option-text"]/span[@class = "price-text"]'
2) 区分主价格和附加价格的关键在于@id字符串,其中两种价格的@id都是

  • (i) 部分随机生成
  • (ii)在两种情况下均包含“-价格文本”,并且
  • (iii)仅在附加价格中包含“额外信息”

    e、 g:

    • 主要价格://*[@id=“pck6-mb-aE-1d84916e1b2-price-text”]
    • 附加价格://*[@id=“NB5A-extra-info-hmb-tE-15ae5bd2e33-price-text”]
如何编写只提取主要价格的XPath,即过滤掉@id中包含“额外信息”字符串的XPath?我尝试了几种方法(下面的示例),但似乎无法正确使用语法。感谢您的帮助,谢谢

尝试的例子:

'//a[@class="booking-link "]/span[@class="price option-text"]/span[@class = "price-text" and not[contains(@id,"extra-info")]]'

'//a[@class="booking-link "]//span[@class="price option-text"]//span[[not[contains(@id,"extra-info")]//span[contains(@id,"-price-text")]]'

'//a[@class="booking-link "]/span[@class="price option-text"]/span[len(@id==33)]' 

尝试以下方法:

//a[@class="booking-link "]/span[@class="price option-text"]/span[@class="price-text"][not(contains(@id,"extra-info"))]

您也可以使用祖先获取价格列表,请尝试下面的解决方案

//span[@class='custom-text'][contains(text(),'View Deal')]/ancestor::div[@class="multibook-dropdown"]//span[@class = "price-text"]