【问题标题】:Downloading and exporting a zip file from url using BeautifulSoup使用 BeautifulSoup 从 url 下载和导出 zip 文件
【发布时间】:2021-08-25 20:55:40
【问题描述】:

我查看了对以前 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'

任何帮助将不胜感激!

【问题讨论】:

  • 什么是urllib.open()?你用的是什么版本的python?应该是urllib.request.urlopen() 吗?如果是urlopen(),那么它实际上并没有返回字符串。它返回一个HTTPResponse 对象。
  • 能否将您收到的错误包括在内。错误可以提供很多有关问题所在的信息
  • 哪些代码更改会导致/停止某些错误。也包括在内也很好
  • 对不起。我已经尝试了一些事情并且得到了不同的错误。我将添加更多细节。
  • urllib.request.urlretrieve() 不是这样工作的。如果你想保存文件,那么你不能只做urllib.request.urlretrieve(link.get('href'), 'test.zip')吗?

标签: python download zipfile write


【解决方案1】:

一个问题是 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)

【讨论】:

  • 谢谢——这就是问题所在!我会更新标题,以便人们在遇到同样问题时更容易找到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 2020-10-19
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
相关资源
最近更新 更多