我尝试使用python请求库从以下链接下载文件: http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NASDAQ&render=download
点击这个链接会给你一个文件(纳斯达克.csv)只有在使用浏览器时。我使用Firefox网络监视器Ctrl-Shift-Q检索Firefox发送的所有头文件。所以现在我终于得到了200个服务器响应,但仍然没有文件。此脚本生成的文件包含部分纳斯达克网站,而不是csv数据。我在这个网站上看到了类似的问题,但没有什么能让我相信,在请求库中这是不可能的。在
代码:
import requests
url = "http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NASDAQ&render=download"
# Fake Firefox headers
headers = {"Host" : "www.nasdaq.com", \
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0", \
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", \
"Accept-Language": "en-US,en;q=0.5", \
"Accept-Encoding": "gzip, deflate", \
"DNT": "1", \
"Cookie": "clientPrefs=||||lightg; userSymbolList=EOD+&DIT; userCookiePref=true; selectedsymbolindustry=EOD,; selectedsymboltype=EOD,EVERGREEN GLOBAL DIVIDEND OPPORTUNITY FUND COMMON SHARES OF BENEFICIAL INTEREST,NYSE; c_enabled$=true", \
"Connection": "keep-alive", }
# Get the list
response = requests.get(url, headers, stream=True)
print(response.status_code)
# Write server response to file
with open("nasdaq.csv", 'wb') as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
解决这个问题的另一种方法是:
这段代码使用URL库创建URL请求对象(
downloadFile
),然后从NASDAQ链接检索数据并将其保存为companylist.csv
。在根据Python文档,如果要发送自定义用户代理(例如Firefox用户代理),可以将
URLopener
子类化,并将version
属性设置为要使用的用户代理。在注意根据Python文档,从pythonv3.3起,
urllib.URLopener()
是不推荐使用的。因此,它最终可能会从Python标准中删除。但是,从pythonv3.6(Dev)起,urllib.URLopener()
仍然作为遗留接口受到支持。你其实不需要那些标题。你甚至不需要保存到一个文件。在
样本输出:
^{pr2}$如果愿意,可以使用
csv.reader
代替DictReader
。在您不需要提供任何标题:
你也可以只写内容:
^{pr2}$或使用urlib:
所有方法都提供3137行csv文件:
如果由于某种原因它对您不起作用,那么您可能需要升级您的请求版本。在
相关问题 更多 >
编程相关推荐