2010-03-07 120 views
10

我目前正在尝试抓取格式相当差的HTML网站(经常缺少结束标签,不使用类或ID,因此很难直接访问所需的元素等等)。 )。我一直在使用BeautifulSoup并取得了一些成功,但每过一段时间(虽然很少),我都遇到了BeautifulSoup创建HTML树的页面,与Firefox或Webkit有点不同。虽然这是可以理解的,因为HTML的格式不明确,如果我能够获得与Firefox或Webkit产生的相同的分析树,我将能够更轻松地解析事情。 这些问题通常类似于网站打开<b>标记两次,当BeautifulSoup看到第二个<b>标记时,它会立即关闭第一个标记,而Firefox和Webkit嵌套<b>标记。使用Python进行网页抓取

是否有Python的网页抓取库(甚至任何其他语言(我越来越绝望)),可以重现由Firefox或WebKit生成的解析树(或者至少在不明确的情况下比BeautifulSoup更接近) 。

+0

为什么不使用WebKit的本身? Webkit是开源的。是的,需要一点时间才能习惯。 – 2010-03-07 18:12:28

+1

你有没有告诉beautifulsoup组?他们可能对像你这样的角落很感兴趣http://groups.google.com/group/beautifulsoup – 2010-03-07 21:31:27

+0

问了好多次...... – 2010-03-08 00:54:10

回答

10

使用BeautifulSoup为一棵树建设者html5lib

from html5lib import HTMLParser, treebuilders 

parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup")) 

text = "a<b>b<b>c" 
soup = parser.parse(text) 
print soup.prettify() 

输出:

<html> 
<head> 
</head> 
<body> 
    a 
    <b> 
    b 
    <b> 
    c 
    </b> 
    </b> 
</body> 
</html> 
1

那么,WebKit是开源的,所以你可以使用它自己的解析器(在WebCore的成分),如果任何语言是可以接受的

3

你试过scrapy

Scrapy是一个快速的高级别屏幕 刮网页抓取框架, 用来抓取网站,并从自己的网页中提取 结构化数据。它可以用于从数据挖掘到 监控和自动化测试的广泛的 目的。

0

从似乎ICantBelieveItsBeautifulSoup解析器是你想要的文件:

ICantBelieveItsBeautifulSoup也是BeautifulSoup的 子类。它有HTML 启发式更符合HTML标准 ,但忽略如何在现实世界中使用HTML。对于 例如,它是有效的HTML窝<乙> 标签,但在现实世界中的嵌套 <乙>标签几乎总是意味着该 作者忘了关第一<乙> 标签。如果遇到某人 实际上嵌套<B>标签,那么您可以使用ICantBelieveItsBeautifulSoup 。

0

这个看起来对我好,我用它自己:链接[http://code.google.com/p/webscraping/]

1

可以使用lxml的解析器,在beautifulsoup,和您使用xpath在未格式化的html页面中查找数据,您可以在使用萤火虫检查元素时复制xpath。

你可以看看这个教程: http://www.youtube.com/watch?v=PgWfF-Ut0zM