python - HTTPError:401客户端错误:通过python而不是通过chome浏览器访问网站时
问题描述
import requests
from bs4 import BeautifulSoup
import pandas as pd
import datetime as dt,time
import os
from pathlib import Path
import pandas as pd
import numpy as np
import datetime as dt
from pathlib import Path
df= ['ACC', 'ADANIENT', 'ADANIPORTS', 'AMARAJABAT', 'AMBUJACEM', 'APOLLOHOSP', 'APOLLOTYRE', 'ASHOKLEY', 'ASIANPAINT', 'AUROPHARMA', 'AXISBANK', 'BAJAJ-AUTO', 'BAJAJFINSV', 'BAJFINANCE', 'BALKRISIND', 'BANDHANBNK', 'BANKBARODA',
'BATAINDIA', 'BEL', 'BERGEPAINT', 'BHARATFORG', 'BHARTIARTL', 'BHEL', 'BIOCON', 'BOSCHLTD', 'BPCL', 'BRITANNIA','CADILAHC', 'CANBK', 'CHOLAFIN', 'CIPLA', 'COALINDIA', 'COFORGE', 'COLPAL', 'CONCOR', 'CUMMINSIND', 'DABUR', 'DIVISLAB', 'DLF', 'DRREDDY', 'EICHERMOT', 'ESCORTS', 'EXIDEIND', 'FEDERALBNK', 'GAIL', 'GLENMARK', 'GMRINFRA', 'GODREJCP', 'GODREJPROP', 'GRASIM', 'HAVELLS', 'HCLTECH', 'HDFC', 'HDFCBANK', 'HDFCLIFE', 'HEROMOTOCO', 'HINDALCO', 'HINDPETRO', 'HINDUNILVR', 'IBULHSGFIN', 'ICICIBANK', 'ICICIPRULI', 'IDEA', 'IDFCFIRSTB', 'IGL',
'INDIGO','INDUSINDBK','INFRATEL','INFY','IOC','ITC', 'JINDALSTEL', 'JSWSTEEL', 'JUBLFOOD', 'KOTAKBANK', 'L&TFH', 'LICHSGFIN', 'LT', 'LUPIN', 'M&M', 'M&MFIN', 'MANAPPURAM', 'MARICO','MARUTI','MCDOWELL-N','MFSL','MGL', 'MINDTREE','MOTHERSUMI', 'MRF', 'MUTHOOTFIN', 'NATIONALUM', 'NAUKRI','NESTLEIND','NMDC', 'NTPC','ONGC', 'PAGEIND','PEL', 'PETRONET',
'PFC', 'PIDILITIND','PNB', 'POWERGRID','PVR', 'RAMCOCEM','RBLBANK', 'RECLTD','RELIANCE', 'SAIL','SBILIFE', 'SBIN','SHREECEM','SIEMENS','SRF','SRTRANSFIN','SUNPHARMA','SUNTV','TATACHEM', 'TATACONSUM','TATAMOTORS', 'TATAPOWER','TATASTEEL', 'TCS','TECHM', 'TITAN','TORNTPHARM', 'TORNTPOWER', 'TVSMOTOR', 'UBL','ULTRACEMCO','UPL', 'VEDL', 'VOLTAS','WIPRO', 'ZEEL']
for k in df:
print(k)
k1=k
k=k.replace('&','%26')
url = "https://www.nseindia.com/api/option-chain-equities?symbol="+str(k)
# headers = {"user-agent": "Mozilla/5.0"}
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) chrome/80.0.3987.132 Safari/537.36','Accept-Language': 'en-US,en;q=0.9','Accept-Encoding': 'gzip, deflate'}
response = requests.get(url, headers=headers)
response.raise_for_status()
data1 = response.json()
if not data1:
print("empty @ "+ k)
else:
data=data1["records"]["data"]
columns = pd.DataFrame(data[0]).transpose().columns
final_data=pd.DataFrame(columns=columns)
for i in range(0,len(data)):
z=pd.DataFrame(data[i])
zz=z.transpose()
if(len(zz.index)==3):
final_data=final_data.append(zz.loc[[zz.index[2]]])
elif(len(zz.index)==4):
final_data=final_data.append(zz.loc[[zz.index[2]]])
final_data=final_data.append(zz.loc[[zz.index[3]]])
final_data=final_data.reset_index()
final_data=final_data.rename(columns = {'index':'option_type'})
final_data=final_data[(final_data['openInterest']>0)&(final_data['changeinOpenInterest']>0)].reset_index(drop=True)
path=Path('E:\code and finance\Data\FNO\Equity\options',k1,(dt.datetime.today()).strftime("%d-%m-%Y")+".xlsx")
final_data.to_excel(path)
我正在使用代码来获取数据,但最近我开始收到 HTTPError: 401 Client Error: when access a website by python but not by chrome browser. 我应该怎么做才能像我在 python 中一样访问网站。该链接在 chrome 中有效,但在 python 中无效
解决方案
推荐阅读
- regex - 排除文件夹并阻止其他文件夹
- python - 如何在 Tkinter 条目中有占位符?
- spring-boot - 反应式 Spring Security PostAuthorize 注释不起作用
- javascript - 在其他条件下禁用和启用 jQuery 中的提交按钮
- reactjs - 如何模拟由包装器中同一组件上的函数触发的响应?
- c# - Xamarin Slider OnDraw 仅调用一次
- python - Python中两个不同形状的数组的余弦距离是如何计算的?
- r - 使用常用词逐行合并两个数据框
- swift - SwiftUI - 与 Swift 相比,如何在应用程序中正确使用 func / struct?
- php - PHP My Admin + traefik - 如何更改默认路由?