Python - 从带有链接的网页下载 CSV 文件

标签 python csv web download session-cookies

我正在尝试从 this page 下载 CSV 文件,通过 python 脚本。

但是当我尝试通过浏览器中的链接直接访问 CSV 文件时,会显示协议(protocol)表格。我必须同意此表格才能下载该文件。

无法检索 csv 文件的确切 URL。它是一个发送到后端数据库的值,用于获取文件 - 例如 PERIOD_ID=2013-0:

https://www.paoilandgasreporting.state.pa.us/publicreports/Modules/DataExports/ExportProductionData.aspx?PERIOD_ID=2013-0

我尝试过urllib2.open()urllib2.read(),但它导致的是协议(protocol)形式的html内容,而不是文件内容。

我如何编写一个Python代码来处理这个重定向,然后获取CSV文件并让我保存在磁盘上?

最佳答案

您需要设置ASP.NET_SessionId cookie。您可以通过使用 Chrome 上下文菜单中的检查元素选项或使用 Firefox 和 Firebug 来找到它。扩大。

使用 Chrome:

  1. 右键点击网页(同意条款后)并选择检查元素
  2. 点击资源 -> Cookie
  3. 选择列表中唯一的元素
  4. 复制 ASP.NET_SessionId 元素的

使用 Firebug:

  1. 右键点击网页(同意条款后),然后点击“*使用 Firebug 检查元素”
  2. 点击Cookie
  3. 复制 ASP.NET_SessionId 元素的

就我而言,我得到了ihbjzynwfcfvq4nzkncbviou - 它可能对你有用,如果没有,你需要执行上述过程。

将 cookie 添加到您的请求中,并使用 requests 模块下载文件(基于 answereladc ):

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/

相关文章:

图像在 firefox 中呈现的方式与在 chrome 中呈现的不同

Web 可访问性和 h1-h6 标题 - 所有内容都必须在这些标签下吗?

python - 无法将标准输出复制到 python 中的文件

Python:引发异常且未处理后线程会被终止吗?

html - 使用html代码将mysql表导出到csv

node.js - 如何在将 Json 转换为 CSV 时在 json2csv 库中提供自定义字段

使用 numpy 中的加载文本导入 cdv 时出现 ' b ' 的 Python 问题

php - 如何处理内联PHP外文字符?

python - python 函数的显式签名,参数包括 2d numpy 数组

python - wxPython 非阻塞 GUI 线程和多处理?