我正在尝试从 this page 下载 CSV 文件,通过 python 脚本。
但是当我尝试通过浏览器中的链接直接访问 CSV 文件时,会显示协议(protocol)表格。我必须同意此表格才能下载该文件。
无法检索 csv 文件的确切 URL。它是一个发送到后端数据库的值,用于获取文件 - 例如 PERIOD_ID=2013-0
:
我尝试过urllib2.open()
和urllib2.read()
,但它导致的是协议(protocol)形式的html内容,而不是文件内容。
我如何编写一个Python代码来处理这个重定向,然后获取CSV文件并让我保存在磁盘上?
最佳答案
您需要设置ASP.NET_SessionId
cookie。您可以通过使用 Chrome 上下文菜单中的检查元素选项或使用 Firefox 和 Firebug 来找到它。扩大。
使用 Chrome:
- 右键点击网页(同意条款后)并选择检查元素
- 点击资源 -> Cookie
- 选择列表中唯一的元素
- 复制
ASP.NET_SessionId
元素的值
使用 Firebug:
- 右键点击网页(同意条款后),然后点击“*使用 Firebug 检查元素”
- 点击Cookie
- 复制
ASP.NET_SessionId
元素的值
就我而言,我得到了ihbjzynwfcfvq4nzkncbviou
- 它可能对你有用,如果没有,你需要执行上述过程。
将 cookie 添加到您的请求中,并使用 requests
模块下载文件(基于 answer 的 eladc ):
import requests
cookies = {'ASP.NET_SessionId': 'ihbjzynwfcfvq4nzkncbviou'}
r = requests.get(
url=('https://www.paoilandgasreporting.state.pa.us/publicreports/Modules/'
'DataExports/ExportProductionData.aspx?PERIOD_ID=2013-0'),
cookies=cookies
)
with open('2013-0.csv', 'wb') as ofile:
for chunk in r.iter_content(chunk_size=1024):
ofile.write(chunk)
ofile.flush()
关于Python - 从带有链接的网页下载 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23462488/