Обновление кода - Python Automation
Я новичок в этом сайте и новичок в Python- как всего через несколько дней в курсе. На работе я унаследовал проект хорошего размера, который предусматривает сопоставление 9-значных почтовых индексов в файле Excel с их районами Конгресса США (с веб-сайта). Благодаря исследованию кода (что я мало знаю) я заметил, что автор может использовать веб-сайт, который допускает только 5-значный почтовый индекс, а не 9-значный. Поскольку в некоторых округах используются почтовые индексы, более точными являются 9-значные коды. Вот код, с которым я работаю:
import urllib
import re
import csv
import datetime
print datetime.datetime.now()
INPUT_FILE_NAME = 'zip1.csv'
OUTPUT_FILE_NAME = 'legislator_output_%s-%0*d%0*d.csv' % ((datetime.date.today(), 2, datetime.datetime.now().hour, 2, datetime.datetime.now().minute))
print 'file name:', OUTPUT_FILE_NAME
input_file_handler = open(INPUT_FILE_NAME, 'rb')
input_reader = csv.reader(input_file_handler)
output_file_handler = open(OUTPUT_FILE_NAME, 'wb', 1)
output_writer = csv.writer(output_file_handler)
output_writer.writerow(['unique id', 'zip', 'plus 4', 'member url', 'member name', 'member district'])
fail_list = []
counter = 0
for input_line in input_reader:
zip_entry = '%s-%s' % (input_line[1], input_line[2])
unique_id = input_line[0]
counter += 1
#if counter > 25: continue
zip_part = zip_entry.split('-')[0]
plus_four_part = zip_entry.split('-')[1]
params = urllib.urlencode({'ZIP':zip_part, '%2B4':plus_four_part})
f = urllib.urlopen('http://www.house.gov/htbin/zipfind', params)
page_source = f.read()
#print page_source
relevant_section = re.findall(r'templateLanding(.*?)contentMain', page_source, re.DOTALL)
rep_info = re.findall('<a href="(.*?)">(.*?)</a>', relevant_section[0])
rep_district_info = re.findall('is located in (.*?)\.', relevant_section[0])
try:
member_url = rep_info[0][0]
member_name = rep_info[0][1]
member_district = rep_district_info[0]
#member_district = rep_info[0][2]
except:
fail_list += [zip_entry]
member_url = ''
member_name = ''
member_district = ''
row_to_write = [unique_id, zip_part, plus_four_part, member_url, member_name, member_district, datetime.datetime.now()]
output_writer.writerow(row_to_write)
if counter % 50 == 0:
print counter, row_to_write
output_file_handler.close() print OUTPUT_FILE_NAME, 'closed at', datetime.datetime.now()
print len(fail_list), 'entries failed to lookup'
print counter, 'rows done at', datetime.datetime.now()
Таким образом, автор использовал сайт, который допускает только пять цифр (код, как и этот сайт, имеет пару лет). Я понятия не имею, как правильно заменить его на новом сайте.
Если кто-то знает о решении или может указать мне, какие ресурсы могут помочь, я был бы очень признателен. На данный момент я потерялся!
1 ответ
Что я вижу, вы можете запросить, например, http://www.house.gov/htbin/findrep?ZIP=63333-1211
Таким образом, вы могли бы заменить urllib
звать
urllib.urlopen('http://www.house.gov/htbin/findrep', zip_entry)