2012-03-04 39 views
3

我试图写一个程序,作为一个例子,将刮最高价关闭此网页:原始HTML与使用机械化和美丽的汤蟒蛇DOM刮

http://www.kayak.com/#/flights/JFK-PAR/2012-06-01/2012-07-01/1adults

第一,我很容易通过执行以下操作来检索HTML:

from urllib import urlopen 
from BeautifulSoup import BeautifulSoup 
import mechanize 

webpage = 'http://www.kayak.com/#/flights/JFK-PAR/2012-06-01/2012-07-01/1adults' 
br = mechanize.Browser() 
data = br.open(webpage).get_data() 

soup = BeautifulSoup(data) 
print soup 

但是,原始HTML不包含价格。浏览器确实......这是事情(这里的澄清可能也会帮助我)...并在构建DOM树时从别处检索价格。

我被引导认为机械化会像我的浏览器一样行动并返回DOM树,我也相信这是我看到的,例如Chrome的开发人员工具视图(页面如果我对此不正确,我该如何去获取价格信息的存储空间?)为了查看DOM树,是否需要告诉机械化要做些什么?

一旦我可以将DOM树转换为python,我需要做的一切应该是快照。谢谢!

回答

0

回答我自己的问题,因为在问这个问题以后的几年里,我学到了很多东西。今天我会用Selenium Webdriver来完成这项工作。 Selenium正是我在2012年为这种类型的网页抓取项目寻找的工具。

3

机械化和美丽的汤是无法打败的工具在python网络报废。

但你需要明白是什么意思什么:

Mechanize:它模仿网页上的浏览器功能。

BeautifulSoup:即使HTML格式不正确,HTML解析器也能正常工作。

你的问题似乎是javascript。价格通过使用javascript的ajax调用获得填充。但是,Mechanize不会执行JavaScript,因此,由JavaScript导致的任何内容在机械化过程中都将保持不可见状态。

看看这个:http://github.com/davisp/python-spidermonkey/tree/master

这确实对机械化和美丽的汤JS执行的包装。

+1

大约四年前,我可能会同意你关于美丽的汤...... – pguardiario 2012-03-04 09:12:34

+0

精心制作..... – 2012-03-04 13:07:42

+0

现在任何基于libxml2的解析器都会击败美丽的汤,并且有很多汤。 – pguardiario 2012-03-04 22:11:28