2015-08-17 3 views
0

У меня были проблемы с предыдущими частями моего кода, но теперь, когда я исправил некоторые вещи, я не могу понять, как извлекать данные и правильно использовать регулярное выражение. Я пытаюсь получить полный адрес из ссылки BBB в переменной url. Как я могу эффективно вытащить название и адрес компании?Regex in Python dilemma

Вот код:

import urllib2 
import re 

print "Enter an industry keyword." 
print "Example: florists, construction, tiles" 

keyword = raw_input('> ') 

print "How many pages to dig through BBB?" 
total_pages = int(raw_input('> ')) 

print "Working..." 

page_number = 1 
address_list = [] 

address_pattern = r'<address>(.*?)<\/address>' # here is the issue 

for page_number in range(1,total_pages): 

    url = 'https://www.bbb.org/search/?type=category&input=' + keyword + '&filter=business&page=' + str(page_number) 
    req = urllib2.Request(url) 
    req.add_header('User-Agent', 'Mozilla/5.0') 
    resp = urllib2.urlopen(req) 
    respData = resp.read() 

    business_address = re.findall(address_pattern,str(respData)) 
    address_list.extend(business_address) 

for each in address_list: 
    print each 

print "\n Save to text file? Hit ENTER if so.\n" 
raw_input('>') 

file = open('export.txt','w') 

for each in address_list: 
    file.write('%r \n' % each) 

file.close() 

print 'File saved!' 

ответ

0

Ваш рисунок должен быть,

address_pattern = r'<address>(.*?)<\/address>' 

не *.?. (.*?) сделает неживой матч. Получите строку, которая существует между этим тегом из индекса группы 1. К сожалению, это не будет соответствовать, если в тексте присутствует символ новой строки. Поэтому я предлагаю вам включить модификатор DOTALL.

address_pattern = r'(?s)<address>(.*?)<\/address>' 
+0

Я просто попробовал это и не повезло. – n0de

+0

Опубликовать вывод 'str (respData)' –

+0

Спасибо, что сработали! Что делать, если я пытаюсь избавиться от HTML-комментария, который извлекается с помощью адресов? – n0de