使用Pandas/Urllib的Python下载文件

2024-10-01 22:43:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python3.x下载一个CSV文件 文件的路径是:https://www.nseindia.com/content/fo/fo_mktlots.csv

我找到了三种方法。三种方法中只有一种有效。我想知道为什么我做错了什么。在

  1. 方法1:(不成功)

    import pandas as pd
    
    mytable = pd.read_table("https://www.nseindia.com/content/fo/fo_mktlots.csv",sep=",")
    print(mytable)
    

    但我得到了以下错误:

    - HTTPError: HTTP Error 403: Forbidden
    
  2. 方法二:(不成功)

    from urllib.request import Request, urlopen
    
    url='https://www.nseindia.com/content/fo/fo_mktlots.csv'
    
    url_request  = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
    html = urlopen(url_request ).read()
    

    得到了和以前一样的错误:

     - HTTPError: HTTP Error 403: Forbidden
    
  3. 方法三:(成功)

    import requests
    import pandas as pd
    
    url = 'https://www.nseindia.com/content/fo/fo_mktlots.csv'
    
    r = requests.get(url)
    df = pd.read_csv(StringIO(r.text))
    

我还可以使用Excel VBA打开文件,如下所示:

Workbooks.Open Filename:="https://www.nseindia.com/content/fo/fo_mktlots.csv"

还有,有没有其他方法可以做到这一点呢?在


Tags: 文件csv方法httpsimportcomurlread
1条回答
网友
1楼 · 发布于 2024-10-01 22:43:03

该网站试图防止内容抓取。在

问题不在于你做错了什么,而在于如何配置web服务器以及它在各种情况下的行为。在

但是要克服刮取保护,创建定义良好的http请求头,最好的方法是发送一组真正的web浏览器所做的http报头。在

在这里,它使用最小集:

>>> myHeaders = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', 'Referer': 'https://www.nseindia.com', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'}
>>> url_request  = Request(url, headers=myHeaders)
>>> html = urlopen(url_request ).read()
>>> len(html)
42864
>>> 

可以将urllib传递给pandas:

^{pr2}$

相关问题 更多 >

    热门问题