javascript - python从skyscanner抓取航班和价格数据
问题描述
我正在尝试从以下网址获取价格数据。但是我似乎只能将'div'中的文本降低到一定水平,这是我的代码:
from selenium import webdriver
from bs4 import BeautifulSoup
def scrape_flight_prices(URL):
browser = webdriver.PhantomJS()
# PARSE THE HTML
browser.get(URL)
soup = BeautifulSoup(browser.page_source, "lxml")
page_divs = soup.findAll("div", attrs={'id':'app-root'})
for p in page_divs:
print(p)
if __name__ == '__main__':
URL1="https://www.skyscanner.net/transport/flights/brs/gnb/190216/190223/?adults=1&children=0&adultsv2=1&childrenv2=&infants=0&cabinclass=economy&rtn=1&preferdirects=false&outboundaltsenabled=false&inboundaltsenabled=false&ref=home#results"
这是输出:
<div id="app-root">
<section class="day-content state-loading state-no-results" id="daysection">
<div class="day-searching">
<div class="hot-spinner medium"></div>
<div class="day-searching-message">Searching</div>
</div>
</section>
</div>
我要从中抓取的 html 部分如下所示:
https://www.skyscanner.net/transport/flights/brs/gnb/190216/190223/?adults=1&children=0&adultsv2=1&childrenv2=&infants=0&cabinclass=economy&rtn=1&preferdirects=false&outboundaltsenabled=false&inboundaltsenabled=false&ref=home#results
但是,当我尝试使用以下代码进行抓取时:
prices = soup.findAll("a", attrs={'target':"_blank", "data-e2e":"itinerary-price", "class":"CTASection__price-2bc7h price"})
for p in prices:
print(p)
它什么也没打印!我怀疑一个 js 脚本正在运行一些东西来生成其余的代码和/或数据?谁能帮我提取数据?具体来说,我正在尝试获取价格、航班时间、航空公司名称等,但如果美丽的汤没有从页面打印相关的 html,那么我不知道如何获得它?
将不胜感激任何指针!提前谢谢了!
解决方案
试试下面的代码来获取价格:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
prices = [price.text for price in wait(browser, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "price")))]
print(prices)
推荐阅读
- javascript - 为什么存在滚动条时,clientWidth 和 offsetWidth 的值相同?
- python - 两个应用程序同时访问 localspark 会话实例时发生错误。调用 o2402.defaultParallelism 时出错
- c++ - 如何避免在 Allegro 5 中重绘静态背景?
- android - Android 应用程序已停止工作:java.lang.ClassCastException
- flutter - 触发 onPressed 时,setState 不会更新 UI
- java - 为什么我的程序不接受我返回的布尔结果?
- c# - List 中的控件不等同于原始控件
- clojure - 如何从文件中一次读取一行文本,并将文本分配给 Clojure 中的变量
- c - 解释器中的手动与 GC 内存管理和使用 malloc/free
- json - 针对在 react-native 中使用 fetch 检索到的 json 对象验证数据