Как напечатать строку после строки, содержащей определенный текст в сохраненном файле в Python? - PullRequest
0 голосов
/ 28 февраля 2010

Я написал программу на Python, чтобы найти оператора сотовой связи по указанному номеру. Он загружает источник http://www.whitepages.com/carrier_lookup?carrier=other&number_0=1112223333&response=1 (где 1112223333 - номер телефона для поиска) и сохраняет его как carrier.html. В источнике оператор находится в строке после тега [div class = "carrier_result"]. (включите <и> для [и], так как stackoverflow решил, что я пытался отформатировать, используя HTML, и не отображал его.)

Моя программа в настоящее время ищет файл и находит строку, содержащую тег div, но теперь мне нужен способ сохранить следующую строку после этого в виде строки. Мой текущий код: http://pastebin.com/MSDN0vbC

Ответы [ 3 ]

4 голосов
/ 28 февраля 2010

То, что вы действительно хотите сделать, это правильно проанализировать HTML. Используйте библиотеку BeautifulSoup - это прекрасно.

Пример кода:

import urllib2, BeautifulSoup

opener = urllib2.build_opener()
opener.addheaders[0] = ('User-agent', 'Mozilla/5.1')

response = opener.open('http://www.whitepages.com/carrier_lookup?carrier=other&number_0=1112223333&response=1').read()

bs = BeautifulSoup.BeautifulSoup(response)
print bs.findAll('div', attrs={'class': 'carrier_result'})[0].next.strip()
2 голосов
/ 28 февраля 2010

, чтобы получить следующую строку, вы можете использовать

htmlsource = open('carrier.html', 'r')
for line in htmlsource:
    if '<div class="carrier_result">' in line:
         nextline = htmlsource.next()
         print nextline

"Лучшим" способом является разделение на </div>, а затем получение того, что вы хотите, потому что иногда то, что вам нужно, может находиться в одной строке. Поэтому, используя next (), если вы получите неправильный результат. Например,

data=open("carrier.html").read().split("</div>")
for item in data:
    if '<div class="carrier_result">' in item:
       print item.split('<div class="carrier_result">')[-1].strip()

кстати, если это возможно, попробуйте использовать собственный веб-модуль Python, такой как urllib, urllib2 вместо вызова внешнего wget.

2 голосов
/ 28 февраля 2010

Вместо этого вы должны использовать анализатор HTML, например BeautifulSoup или lxml.

...