返回介绍

3.2 使用高级的网络爬虫技术检索票价数据

发布于 2024-01-26 22:17:32 字数 2437 浏览 0 评论 0 收藏 0

我们已经在前面的章节中学习了如何使用request库来检索网页。正如我之前所说,它是一个了不起的工具,但不幸的是,这里无法工作。我们想要爬取的页面是完全基于AJAX的。异步JavaScript(AJAX)这个方法从服务器获取数据,而不必重新加载整个页面。这意味着,需要使用浏览器来检索数据。虽然这个听起来好像需要大量的额外工作,不过有两个库,当一起使用它们的时候,这就会成为一个轻量级的任务。

这两个库是Selenium和PhantomJS。Selenium是一个强大的工具,它可以自动化Web浏览器,而PhantomJS是一个浏览器。为什么使用PhantomJS而不是Firefox或Chrome呢?PhantomJS是所谓的无头浏览器,意思是它没有可视化的用户界面。这使得它非常精简,成为我们理想的选择。

 

要安装PhantomJS, 你可以从http://phantomjs.org/download.html下载可执行文件或者源码。至于Selenium,它可以通过pip来安装。

我们还需要另一个名为BeautifulSoup4的库来解析页面中的数据。如果你还没有安装这个,也可以使用pip安装它。

完成这些安装之后,让我们开始动手吧。我们将在Jupyter记事本里工作。Jupyter最适合探索性的分析。稍后,当探索完成之后,我们会继续在文本编辑器中工作。文本编辑器更适合编写我们想要部署为应用程序的代码。

首先,导入这些库。

import pandas as pd 
import numpy as np 

from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import 
DesiredCapabilities 
from bs4 import BeautifulSoup 

import matplotlib.pyplot as plt 
%matplotlib inline

接下来,我们将设置代码以实例化浏览器对象。正是这个对象将为我们拉取页面。你可以在浏览器中搜索并复制URL,以此来选择想要的机场或地区。在这里,我会查找从纽约机场到几个亚洲城市的行程。

url = 
"https://www.google.com/flights/explore/#explore;f=JFK,EWR,LGA;t= 
HND,NRT,TPE,HKG,KIX;s=1;li=8;lx=12;d=2016-04-01" 

driver = webdriver.PhantomJS() 

dcap = dict(DesiredCapabilities.PHANTOMJS) 
dcap["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 
(Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like 
Gecko) Chrome/46.0.2490.80 Safari/537.36") 

driver = webdriver.PhantomJS(desired_capabilities=dcap, 
service_args=['--ignore- ssl-errors=true']) 

driver.implicitly_wait(20) 
driver.get(url)

我们需要向接收请求的服务器发送一个用户代理。你可以使用我在此列出的代理,或者如果你愿意,也可以将其替换为自己的代理。进入到解析阶段的时候,这点变得尤为重要。如果你在普通的浏览器中使用某代理来选择文档对象模型(DOM)元素,然后在代码中传递了另一个不同的代理,那么你解析页面的时候也许会碰到问题,因为DOM可能是与用户代理相关的。

你可以通过Google搜索“what is my user agent?”,来找到自己的用户代理。如果你计划将其用于其他的爬虫,请复制这个信息,然后在上述代码中使用它。

运行上述代码之后,你可以使用下面这行代码来保存页面的截图。请检查这个截图,以确保一切看起来正常。

driver.save_screenshot(r'flight_explorer.png')

如果一切都是按计划完成,你应该可以看到输出为True,并且生成一个与所抓取页面相关的图像文件。在普通的Web浏览器中,它看起来就像原有的页面。

接下来,我们将继续解析页面以提取定价信息。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文