为了账号安全,请及时绑定邮箱和手机立即绑定

网络抓取谷歌航班价格

网络抓取谷歌航班价格

达令说 2021-12-21 11:02:15
我正在尝试学习使用 Python 库 BeautifulSoup,例如,我想在 Google Flights 上获取航班价格。所以我连接到谷歌航班,例如在这个链接,我想获得最便宜的航班价格。因此,我将使用此类“gws-flights-results__itinerary-price”(如图所示)获取 div 内的值。这是我写的简单代码:from bs4 import BeautifulSoupimport urllib.requesturl = 'https://www.google.com/flights?hl=it#flt=/m/07_pf./m/05qtj.2019-04-27;c:EUR;e:1;sd:1;t:f;tt:o'page = urllib.request.urlopen(url)soup = BeautifulSoup(page, 'html.parser')div = soup.find('div', attrs={'class': 'gws-flights-results__itinerary-price'})但由此产生的 div 有 class NoneType。我也尝试find_all('div') 但是在我以这种方式找到的所有 div 中,没有我感兴趣的 div。有人可以帮助我吗?
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

看起来javascript需要运行所以使用像selenium这样的方法


from selenium import webdriver

url = 'https://www.google.com/flights?hl=it#flt=/m/07_pf./m/05qtj.2019-04-27;c:EUR;e:1;sd:1;t:f;tt:o'

driver = webdriver.Chrome()

driver.get(url)

print(driver.find_element_by_css_selector('.gws-flights-results__cheapest-price').text)

driver.quit()


查看完整回答
反对 回复 2021-12-21
?
慕容森

TA贡献1853条经验 获得超18个赞

您正在学习网络抓取真是太好了!您之所以获得 NoneType 结果是因为您正在抓取的网站动态加载内容。当请求库获取 url 时,它只包含 javascript。带有此类“gws-flights-results__itinerary-price”的 div 尚未呈现!因此,您用来抓取该网站的抓取方法是不可能的。

但是,您可以使用其他方法,例如使用 selenium 或 splash 等工具获取页面来呈现 javascript,然后解析内容。


查看完整回答
反对 回复 2021-12-21
?
临摹微笑

TA贡献1982条经验 获得超2个赞

BeautifulSoup 是提取部分 HTML 或 XML 的绝佳工具,但在这里看起来您只需要获取另一个 JSON 对象的 GET 请求的 url。

(我现在不在电脑旁,明天可以更新一个例子。)


查看完整回答
反对 回复 2021-12-21
  • 3 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号