使用XPath从Web抓取中获取空结果

时间:2019-05-21 20:50:07

标签: python xpath web-scraping python-requests

我正在使用以下代码从“最便宜的”标签中获取机票价格。但是,结果就是“ []”。

有人可以验证我的代码和XPath是否正确吗?我已经尝试使用相对的(“ // span [@ class ='title price']”)和绝对的XPath。另外,我应该注意,在使用“请求”之前,我正在使用先呈现页面的服务。渲染应该不是问题。

page = requests.get('https://www.momondo.com/flight-search/PHL-VCE/2019-06-19-flexible/2019-06-25-flexible?sort=price_a')
sleep(5)
tree = html.fromstring(page.content)
price = tree.xpath('/html[1]/body[1]/div[1]/div[1]/div[3]/div[1]/div[1]/div[3]/div[1]/div[2]/div[1]/div[2]/div[4]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/a[1]/div[1]/div[2]/span[1]')
print(price)

1 个答案:

答案 0 :(得分:0)

网页数据是通过Java脚本呈现的,因此request.get()无法返回您期望的值。请使用硒webdriverBeautifulSoup来检索这些值。

 from selenium import webdriver
 from bs4 import BeautifulSoup
 import re
 driver=webdriver.Chrome()
 driver.get("https://www.momondo.com/flight-search/PHL-VCE/2019-06-19-flexible/2019-06-25-flexible?sort=price_a&fs=flexdepart=~20190616;flexreturn=~20190622")
 soup=BeautifulSoup(driver.page_source,'html.parser')
 allprice=[price.text.replace('\xa0',' ') for price in soup.find_all('div',class_=re.compile('_A _r _s _v'))]
    print(allprice)
driver.quit()

输出:

['1,280 USD', '1,185 USD', '1,156 USD', '1,205 USD', '1,278 USD', '1,747 USD', 'N/A', '1,461 USD', '1,374 USD', '1,311 USD', '1,509 USD', '1,516 USD', '1,561 USD', '3,310 USD', '1,256 USD', '1,077 USD', '1,146 USD', '1,186 USD', '1,202 USD', '1,397 USD', '1,391 USD', '1,342 USD', '1,167 USD', '1,113 USD', '1,157 USD', '1,149 USD', '1,488 USD', '1,355 USD', '1,235 USD', '1,055 USD', '1,136 USD', '1,114 USD', '1,190 USD', '1,376 USD', '1,258 USD', '1,422 USD', '1,301 USD', '1,117 USD', '1,114 USD', '1,154 USD', '1,212 USD', '1,596 USD', '1,422 USD', '1,429 USD', '1,231 USD', '1,114 USD', '1,164 USD', '1,186 USD', '1,271 USD']

在这里您会找到漂亮的汤文档click here