【发布时间】:2011-09-02 18:20:32
【问题描述】:
我用 BeautifulSoup 制作了一个脚本,它运行良好且可读性很强,但我想有一天重新分发它,而 BeautifulSoup 是我想避免的外部依赖,特别是考虑到 Windows 的使用。
这是代码,它从给定的谷歌地图用户那里获取每个用户地图链接。 ####### 标记的行是使用 BeautifulSoup 的行:
# coding: utf-8
import urllib, re
from BeautifulSoup import BeautifulSoup as bs
uid = '200931058040775970557'
start = 0
shown = 1
while True:
url = 'http://maps.google.com/maps/user?uid='+uid+'&ptab=2&start='+str(start)
source = urllib.urlopen(url).read()
soup = bs(source) ####
maptables = soup.findAll(id=re.compile('^map[0-9]+$')) #################
for table in maptables:
for line in table.findAll('a', 'maptitle'): ################
mapid = re.search(uid+'\.([^"]*)', str(line)).group(1)
mapname = re.search('>(.*)</a>', str(line)).group(1).strip()[:-3]
print shown, mapid, '\t', mapname
shown += 1
urllib.urlretrieve('http://maps.google.com.br/maps/ms?msid=' + uid + '.' + str(mapid) +
'&msa=0&output=kml', mapname + '.kml')
if '<span>Next</span>' in str(source):
start += 5
else:
break
如您所见,使用 BSoup 的代码只有三行,但我不是程序员,尝试使用其他标准的 HTML 和 XML 解析工具时遇到了很多困难,可能是因为我尝试了错误的方法,我猜。
编辑:这个问题更多的是关于替换这个脚本的三行代码,而不是找到解决可能存在的通用 html 解析问题的方法。
任何帮助将不胜感激,感谢阅读!
【问题讨论】:
-
对于任何对代码本身感兴趣的人(从谷歌地图用户下载地图),我有一个具体的问题:stackoverflow.com/questions/7235639
-
如果不添加依赖项,您将无法获得 真正 好的 HTML 解析器。 BeautifulSoup 的存在是有原因的。对 Python 代码的依赖并没有那么不好,它不像用户需要一个 C 编译器。另外,
easy_install也可以在 Windows 上轻松使用。 -
也许我没有说清楚,我只是在寻找一种不使用非标准模块来执行代码中标记的操作的方法,而不是一种替换模块本身以进行通用解析操作的方法。
-
@heltonbiker,这段代码执行的逻辑需要解析HTML。
-
请注意,谷歌地图确实有用于检索数据的 API,这可能比对适用的肉类友好页面进行屏幕截图更容易(或更允许)。 code.google.com/apis/maps/index.html
标签: python html-parsing beautifulsoup