получить информацию с веб-страницы - PullRequest
1 голос
/ 29 марта 2011

я хочу сделать скрипт, чтобы сначала получить информацию с веб-страницы, то есть с страницы http://whois.arin.net/rest/nets;q=74.125.232.147?showDetails=true&showARIN=false

поэтому я хочу получить NetRange и Name и 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 ]

4 голосов
/ 29 марта 2011

B - объект соответствия. То, что вы на самом деле хотите, это значение ячейки таблицы рядом с той, которая говорит "NetRange". Для этого вы можете использовать анализатор HTML / XML, например Beautiful Soup .

Кроме того, примечание о стиле, поскольку тот факт, что это домашнее задание, говорит о том, что вы новичок в программировании: значимые имена переменных стоят усилий, необходимых для их набора.

0 голосов
/ 29 марта 2011

К сожалению, это регулярное выражение крайне неадекватно.Вы должны скопировать и вставить исходный текст XML этой страницы в текстовый редактор и проверить его.Во-первых, узнайте, что это XML в стиле XSLT.Вы охватили XML в своем классе?Если это так, вы должны знать, что вам нужно использовать правильный синтаксический анализатор XML, такой как elementtree , чтобы сделать это намного проще, лучше и надежнее.

Если по какой-то причине вы должны Делайте это как регулярное выражение (на самом деле, не делайте этого, если это не требование класса), вам нужно изменить свой подход.Возможно, поместите его в , повторите попытку , чтобы помочь развить свое регулярное выражение.По крайней мере, вам понадобится скобка для захвата значений.Вот пример для другого сайта: 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)

Также, пожалуйста, используйте лучшие имена переменных.Одно письмо действительно ужасный стиль.Ваш код трудно читать, и он будет становиться все труднее, поскольку он будет выполнять больше работы.

0 голосов
/ 29 марта 2011

Возможно, вы захотите вернуться к тому, что ищете, потому что это даже не в возвращаемых данных.

>>> 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 re * , в частности, раздел search () против match () .В этом случае вы хотите search(), а не match().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...