如何从网站上抓取数据不要返回简单的HTML

时间:2017-04-27 21:40:47

标签: javascript python html selenium web-scraping

我一直在使用请求和BeautifulSoup for python从基本网站中删除HTML,但大多数现代网站都不会因此而传递html。我相信他们运行javascript或其他东西(我不是很熟悉,这里有点菜鸟)。我想知道是否有人知道如何在谷歌航班上搜索航班并刮取最便宜的价格?

如果这是简单的html,我可以解析html树并找到文本结果,但是当你查看"页面源"时,这不会出现。如果您在浏览器中检查元素,则可以在hmtl标记内看到价格,就好像您正在查看基本网站的常规页面来源一样。

这里发生的事情是,inspect元素有html但是页面源不是吗?有没有人知道如何刮掉这类数据?

非常感谢!

Inspect Element Javascript?

2 个答案:

答案 0 :(得分:2)

您已经发现 - 在初始服务器响应之后,页面标记将添加javascript。我还没有使用过BeautifulSoup,但是从它的文档来看,它似乎没有执行javascript,所以你在这方面运气不好。

您可以尝试Selenium,它基本上是一个虚拟浏览器 - 人们将其用于前端测试。它执行javascript,因此它可能能够为您提供所需的内容。

但是,如果您专门查找Google Flights信息,那么就有一个API :) https://developers.google.com/qpx-express/v1/

答案 1 :(得分:0)

您可以考虑使用Scrapy,这将允许您抓取页面,以及许多其他蜘蛛功能。 Scrapy与Splash有很好的集成,这是一个可以用来在页面中执行javascript的库。 Splash可以单独使用,也可以获得Scrapy-Splash

请注意,Splash基本上运行它自己的服务器来执行javascript,因此它会与您的主脚本一起运行并被调用。 Scrapy通过'中间件'或每个请求运行的设置进程来管理:在您的情况下,您将获取页面,在Splash中运行Javascript,然后解析结果。

这可能比插入Selenium等稍微轻一些选项,特别是如果您尝试做的只是渲染页面而不是渲染它,然后以自动方式与各个部分交互。