Обновление кода - 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)
Другие вопросы по тегам