【问题标题】:Updating Code - Python Automation更新代码 - Python 自动化
【发布时间】:2014-11-12 17:52:51
【问题描述】:

我是这个网站的新手,也是 Python 的新手——就像刚开始上一门课程一样。在工作中,我继承了一个规模很大的项目,该项目涉及将 excel 文件中的 9 位邮政编码与他们的美国国会选区(来自网站)进行匹配。我通过对代码的调查(我知道的很少)注意到作者可能使用的网站只允许使用 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()

所以,作者使用了site,它只允许五位数字(代码和这个网站一样已经有几年的历史了)。我不知道如何在新的site 上正确替换它。

如果有人知道解决方案或可以指出可能有帮助的资源方向,我将不胜感激。此刻我迷路了!

【问题讨论】:

    标签: python automation


    【解决方案1】:

    我看到的可以查询,比如http://www.house.gov/htbin/findrep?ZIP=63333-1211 所以你可以替换 urllib 调用

    urllib.urlopen('http://www.house.gov/htbin/findrep', zip_entry)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2023-01-02
      • 1970-01-01
      • 2013-04-05
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多