BeautifulSoup解析器混乱 - HTML

时间:2011-01-08 20:50:25

标签: beautifulsoup

我正试图从另一个网站上删除一些内容,我不确定为什么BeautifulSoup会产生这个输出。它只是在匹配中找到一个空格,但真正的HTML包含大量的标记。如果这对我来说是愚蠢的,我道歉。我是python的新手。

这是我的代码:

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()

如果您遵循该URL,您可以看到sitesDiv包含大量标记。我不确定我做错了什么,或者这只是脚本无法处理的格式错误的标记。谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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

好消息是,您要查找的数据将通过此网址作为JSON提供给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即可获得所需的信息。