我一直试图获取所有美国邮政编码的网页抓取项目为我的公司。我正试图使用uszipcode库自动做这件事,而不是手动从我感兴趣的网站,但无法弄清楚。
这是我的手动尝试:
from bs4 import BeautifulSoup
import requests
url = 'https://www.unitedstateszipcodes.org'
headers = {'User-Agent': 'Chrome/50.0.2661.102'}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
hrefs = []
all_zipcodes = []
# Extract all
for data in soup.find_all('div', class_='state-list'):
for a in data.find_all('a'):
if a is not None:
hrefs.append(a.get('href'))
hrefs.remove(None)
def get_zipcode_list():
"""
get_zipcode_list gets the GET response from the web archives server using CDX API
:return: CDX API output in json format.
"""
for state in hrefs:
state_url = url + state
state_page = requests.get(state_url, headers=headers)
states_soup = BeautifulSoup(state_page.text, 'html.parser')
div = states_soup.find(class_='list-group')
for a in div.findAll('a'):
if str(a.string).isdigit():
all_zipcodes.append(a.string)
return all_zipcodes
这需要大量的时间,并希望知道如何做同样的更有效的方式使用uszipcodes
5条答案
按热度按时间lnxxn5zx1#
您可以尝试按模式“”搜索
更多详细信息请参见文档及其基础教程
kd3sttzy2#
由于邮政编码只有5位数,因此可以迭代100k,并查看哪些邮政编码不会返回错误。此解决方案为您提供一个DataFrame,其中包含每个保存的邮政编码的所有存储信息
sczxawaw3#
美国邮政编码的正则表达式是
[0-9]{5}(?:-[0-9]{4})?
你可以简单地用re模块检查
hgtggwj04#
我能够得到~ 42,150邮政编码为一个类似的项目。想展示我的工作,因为我用这个线程作为一个起点。
ia2d9nvy5#
您可以从official source)下载邮政编码列表,然后解析它(如果它是一次性使用的),并且您不需要与每个邮政编码相关联的任何其他元数据(如uszipcodes提供的元数据)。
uszipcodes也有另一个数据库,这是相当大的,应该有你需要的所有数据。