运行代码后,下载的文件为0bytes。我也尝试过编写回复,也尝试使用缓冲区
我做错了什么,我还能尝试什么?请帮忙
import urllib2
from bs4 import BeautifulSoup
import os
import pandas as pd
storePath='/home/vinaysawant/BankIFSCCodes/'
def DownloadFiles():
# Remove the trailing / you had, as that gives a 404 page
url='https://rbi.org.in/scripts/Bs_viewcontent.aspx?Id=2009'
conn = urllib2.urlopen(url)
html = conn.read().decode('utf-8')
soup = BeautifulSoup(html, "html.parser")
# Select all A elements with href attributes containing URLs starting with http://
for link in soup.select('a[href^="http://"]'):
href = link.get('href')
# Make sure it has one of the correct extensions
if not any(href.endswith(x) for x in ['.csv','.xls','.xlsx']):
continue
filename = href.rsplit('/', 1)[-1]
print href
print("Downloading %s to %s..." % (href, filename) )
#urlretrieve(href, filename)
u = urllib2.urlopen(href)
f = open(storePath+filename, 'wb')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
print "Downloading: %s Bytes: %s" % (filename, file_size)
print("Done.")
file_size_dl = 0
block_sz = 8192
while True:
buffer = u.read(block_sz)
if not buffer:
break
file_size_dl += len(buffer)
f.write(buffer)
status = r"%10d [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
status = status + chr(8) * (len(status) + 1)
print status,
f.close()
exit(1)
DownloadFiles()
我也试过
import urllib
urllib.retreive(url)
我也尝试过使用urllib2 urllib3。
答案 0 :(得分:0)
我对pandas和urllib2并不擅长,但因为这个问题没有答案。我认为问题是你试图下载第一个网址
url='https://rbi.org.in/scripts/Bs_viewcontent.aspx?Id=2009
你在这里定义它然后不改变它
u = urllib2.urlopen(url)
之后,您尝试下载与网址相关联的内容
buffer = u.read(block_sz)
而不是他们我猜你应该尝试下载href 所以试着改变这个
u = urllib2.urlopen(url)
用
u = urllib2.urlopen(href)
答案 1 :(得分:0)
问题是重定向到HTTPS是通过js而不是HTTP标头完成的,因此urllib
不会跟随。但是,您可以在链接上使用replace
并手动更改协议。
href = link.get('href').replace('http://', 'https://')
虽然这解决了问题,但在try-except块中使用urlopen
并不是一个坏主意。
try:
u = urllib2.urlopen(href)
except Exception as e:
print(e)
continue