首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >urllib2.HTTPError: HTTP错误403:禁止

urllib2.HTTPError: HTTP错误403:禁止
EN

Stack Overflow用户
提问于 2012-11-09 14:51:03
回答 6查看 192.4K关注 0票数 119

我正在尝试使用python自动下载历史股票数据。我尝试打开的网址响应为CSV文件,但我无法使用urllib2打开。我尝试过按照前面几个问题中的说明更改用户代理,我甚至尝试接受响应cookie,但没有成功。你能帮帮我吗。

注意:同样的方法也适用于雅虎财经。

代码:

代码语言:javascript
复制
import urllib2,cookielib

site= "http://www.nseindia.com/live_market/dynaContent/live_watch/get_quote/getHistoricalData.jsp?symbol=JPASSOCIAT&fromDate=1-JAN-2012&toDate=1-AUG-2012&datePeriod=unselected&hiddDwnld=true"

hdr = {'User-Agent':'Mozilla/5.0'}

req = urllib2.Request(site,headers=hdr)

page = urllib2.urlopen(req)

错误

文件"C:\Python27\lib\urllib2.py",第527行,位于http_error_default raise HTTPError(req.get_full_url(),code,msg,hdrs,fp) urllib2.HTTPE错误: HTTP错误403:禁止

感谢您的帮助

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-11-09 15:19:12

通过添加更多的头文件,我能够获得数据:

代码语言:javascript
复制
import urllib2,cookielib

site= "http://www.nseindia.com/live_market/dynaContent/live_watch/get_quote/getHistoricalData.jsp?symbol=JPASSOCIAT&fromDate=1-JAN-2012&toDate=1-AUG-2012&datePeriod=unselected&hiddDwnld=true"
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
       'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
       'Accept-Encoding': 'none',
       'Accept-Language': 'en-US,en;q=0.8',
       'Connection': 'keep-alive'}

req = urllib2.Request(site, headers=hdr)

try:
    page = urllib2.urlopen(req)
except urllib2.HTTPError, e:
    print e.fp.read()

content = page.read()
print content

实际上,它只使用这个额外的头:

代码语言:javascript
复制
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
票数 185
EN

Stack Overflow用户

发布于 2013-04-24 17:09:18

这将在Python 3中运行

代码语言:javascript
复制
import urllib.request

user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'

url = "http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers"
headers={'User-Agent':user_agent,} 

request=urllib.request.Request(url,None,headers) #The assembled request
response = urllib.request.urlopen(request)
data = response.read() # The data u need
票数 63
EN

Stack Overflow用户

发布于 2017-09-14 16:00:55

NSE网站已更改,较旧的脚本对当前网站是半优化的。此代码片段可以收集安全的日常详细信息。详细信息包括代码、证券类型、前一交易日收盘价、开盘价、高价、低价、均价、交易量、成交额、交易数量、交割数量以及交割与交易的比率。这些都以字典形式的列表形式方便地呈现。

支持请求和BeautifulSoup的Python3.x版本

代码语言:javascript
复制
from requests import get
from csv import DictReader
from bs4 import BeautifulSoup as Soup
from datetime import date
from io import StringIO 

SECURITY_NAME="3MINDIA" # Change this to get quote for another stock
START_DATE= date(2017, 1, 1) # Start date of stock quote data DD-MM-YYYY
END_DATE= date(2017, 9, 14)  # End date of stock quote data DD-MM-YYYY


BASE_URL = "https://www.nseindia.com/products/dynaContent/common/productsSymbolMapping.jsp?symbol={security}&segmentLink=3&symbolCount=1&series=ALL&dateRange=+&fromDate={start_date}&toDate={end_date}&dataType=PRICEVOLUMEDELIVERABLE"




def getquote(symbol, start, end):
    start = start.strftime("%-d-%-m-%Y")
    end = end.strftime("%-d-%-m-%Y")

    hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
         'Referer': 'https://cssspritegenerator.com',
         'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
         'Accept-Encoding': 'none',
         'Accept-Language': 'en-US,en;q=0.8',
         'Connection': 'keep-alive'}

    url = BASE_URL.format(security=symbol, start_date=start, end_date=end)
    d = get(url, headers=hdr)
    soup = Soup(d.content, 'html.parser')
    payload = soup.find('div', {'id': 'csvContentDiv'}).text.replace(':', '\n')
    csv = DictReader(StringIO(payload))
    for row in csv:
        print({k:v.strip() for k, v in row.items()})


 if __name__ == '__main__':
     getquote(SECURITY_NAME, START_DATE, END_DATE)

此外,这是相对模块化的,并且可以使用snippet。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13303449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档