Python 使用BeautifulSoup从url下载和导出zip文件

Python 使用BeautifulSoup从url下载和导出zip文件,python,download,zipfile,write,Python,Download,Zipfile,Write,我已经查看了对以前zip下载问题的回答,我一直遇到问题。我使用BeatifulSoup来标识我要下载的特定zip文件,代码如下: state_fips = '06' county_fips = '037' url = 'https://www2.census.gov/geo/tiger/TIGER2020/ROADS/' url_get = requests.get(url) soup = BeautifulSoup(url_get.content, 'html.parser') # get

我已经查看了对以前zip下载问题的回答,我一直遇到问题。我使用BeatifulSoup来标识我要下载的特定zip文件,代码如下:

state_fips = '06'
county_fips = '037'
url = 'https://www2.census.gov/geo/tiger/TIGER2020/ROADS/'
url_get = requests.get(url)
soup = BeautifulSoup(url_get.content, 'html.parser')

# get state and county fips
st_cnty_string = f'tl_2020_{state_fips}{county_fips}'
然后我尝试将数据读写到一个文件中,但我不断收到错误或0字节的文件。我不确定问题在哪里:

link = soup.findAll('a', attrs={'href': re.compile(st_cnty_string)})
data = urllib.request.urlretrieve(url, link.get('href'))
open('test.zip', 'wb').write(data)
此尝试导致以下错误:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: a bytes-like object is required, not 'tuple'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:需要类似字节的对象,而不是“元组”

任何帮助都将不胜感激

一个问题是BeautifulSoup返回相对链接。但是你需要一个完整的url来下载zipfile

试试这个:

for link in soup.findAll('a', attrs={'href': re.compile(st_cnty_string)}):
    link_abs = f'{url}/{link.get("href")}'
    with open('test.zip', 'wb') as f:
        f.write(requests.get(link_abs).content)

什么是
urllib.open()
?您使用的是什么版本的python?应该是
urllib.request.urlopen()
?如果它是
urlopen()
,那么它实际上不会返回字符串。它返回一个对象。你能包括你收到的错误吗。错误告诉我们很多关于出错的信息,以及哪些代码更改导致/停止某些错误。如果包括TooReform,那就太好了。我尝试了一些方法,但都出现了不同的错误。我会再补充一点细节。这不是工作原理。如果您想保存文件,那么您就不能执行
urllib.request.urlretrieve(link.get('href'),'test.zip')
?谢谢--这就是问题所在!我将更新标题,以便人们在遇到相同问题时更容易找到。