从网页获取信息

时间:2011-03-29 17:20:42

标签: python html search

我想制作脚本,以便首先从网页获取信息页面http://whois.arin.net/rest/nets;q=74.125.232.147?showDetails=true&showARIN=false

所以我想获得NetRangeName以及CIDR,所以我创建了这段代码

import sys,urllib,re
J="http://whois.arin.net/rest/nets;q=74.125.232.147?showDetails=true&showARIN=false"
A=urllib.urlopen(J)
AB=A.read()
A.close()
B=re.match("NetRange",AB)
print B

并且没有打印出信息;(

3 个答案:

答案 0 :(得分:4)

B是重新匹配对象。你真正想要的是表格单元格的价值,旁边是"NetRange"。为此,您可以使用像Beautiful Soup这样的HTML / XML解析器。

此外,关于风格的说明,因为这是作业的事实表明你是编程的新手:有意义的变量名称值得你输入它们所花费的精力。

答案 1 :(得分:0)

您可能想要重新访问您要搜索的内容,因为它甚至不会返回到返回的数据中。

>>> import urllib
>>> J="http://whois.arin.net/rest/nets;q=74.125.232.147?showDetails=true&showARIN=false"
>>> resp = urllib.urlopen(J)
>>> resp.code
200
>>> data = resp.read()
>>> 'NetRange' in data
>>> False

此外,请查看Python's re module的文档,特别是search() vs. match()部分。在这种情况下,您需要search(),而不是match()

答案 2 :(得分:0)

不幸的是,正则表达式非常不足。您应该将该页面的 XML 源复制并粘贴到文本编辑器中并进行检查。首先,要认识到它是由XSLT设计的XML。你有没有在课堂上介绍过XML?如果是这样,您应该知道需要使用正确的XML解析器,例如elementtree,以使这更容易,更好,更可靠。

如果出于某种原因,必须将其作为正则表达式执行(实际上,除非是类要求,否则您需要)修改您的方法。也许把它放在re-try中以帮助你开发你的正则表达式。至少你需要使用括号来捕获值。以下是另一个网站http://api.hostip.info/?ip=4.8.42.19

的示例
countryMatches = re.findall(r"""<countryName>(.+)</countryName>""", AB)
if countryMatches:
    country = countyMatches.group(0)[0] #first match, first (only) group)

另外,请使用更好的变量名称。一封信真的很糟糕。你的代码很难阅读,只会因为工作量增加而变得更难。