2011-01-08 56 views
1

我试图从另一个网站刮掉一些内容,我不知道为什么BeautifulSoup产生这种输出。它只是在匹配内找到一个空格,但真正的HTML包含大量的标记。我很抱歉,如果这是我的一部分愚蠢。我是python的新手。BeautifulSoup Parser Confusion - HTML

这里是我的代码:

import sys 
import os 
import mechanize 
import re 
from BeautifulSoup import BeautifulSoup 

def scrape_trails(BASE_URL, data): 
    #Get the trail names 
    soup = BeautifulSoup(data) 
    sitesDiv = soup.findAll("div", attrs={"id" : "sitesDiv"}) 
    print sitesDiv 


def main(): 
    BASE_URL = "http://www.dnr.state.mn.us/skiing/skipass/list.html" 
    br = mechanize.Browser() 
    data = br.open(BASE_URL).get_data() 
    links = scrape_trails(BASE_URL, data) 


if __name__ == '__main__': 
    main() 

如果你跟随你可以看到sitesDiv该URL中含有大量的标记。我不知道我是否做错了什么,或者这只是脚本无法处理的格式错误。谢谢!

回答

2

的问题是,HTML提供从URL有一个空div.sitesDiv:

<div id="sitesDiv">&nbsp;</div> 

有在页面加载后在div填充网页上的脚本。你的Python代码不会执行Javascript,因此div永远不会被修改,所以当你的代码解析它时它仍然是空的。

好消息是,您要查找的数据将作为JSON从此URL提供给HTML:http://maps.dnr.state.mn.us/cgi-bin/mapserv54?map=/usr/local/mapserver/apps/prk/ski_pass/sites.map&mode=nquery&qformat=geojson。因此,您可以完全跳过BeautifulSoup,直接阅读并解析JSON以获取所需的信息。