我写了一个使用 BeatifulSoup 库的 Python 函数。该函数应返回 Wikipedia 文章中的符号列表。
在Shell中,我执行如下函数:
pythonScript.my_function()
...它在第28行引发错误:
No connections adapters were found for 'link'.
当我直接在shell中输入我的函数中的相同代码时,它完美地运行。有了相同的链接。我甚至复制并粘贴了这些线条。
这是我正在谈论的两行代码,错误出现在 BeautifulSoup 函数中。
response = requests.get('link')
soup = bs4.BeautifulSoup(response.text)
我无法解释为什么会发生这种错误...
编辑:这是完整的代码
#/usr/bin/python
# -*- coding: utf-8 -*-
#insert_symbols.py
from __future__ import print_function
import datetime
from math import ceil
import bs4
import MySQLdb as mdb
import requests
def obtain_parse_wiki_snp500():
'''
Download and parse the Wikipedia list of S&P500
constituents using requests and BeatifulSoup.
Returns a list of tuples for to add to MySQL.
'''
#Stores the current time, for the created at record
now = datetime.datetime.utcnow()
#Use requests and BeautifulSoup to download the
#list of S&P500 companies and obtain the symbol table
response = requests.get('http://en.wikipedia.org/wiki/list_of_S%26P_500_companies')
soup = bs4.BeautifulSoup(response.text)
我认为这一定是足够的。这是发生错误的点。 在壳牌中,我一步一步地做了一遍: 导入库,然后调用请求和bs4函数。 唯一的区别是在Shell中我没有定义一个函数。
EDIT2:
以下是确切的错误消息:
追踪(最近一次通话): 文件"",第1行,in 文件" /home/felix/Dokumente/PythonSAT/DownloadSymbolsFromWikipedia.py",第28行,在obtain_parse_wiki_snp500中
汤= bs4.BeautifulSoup(response.text) 文件" /home/felix/anaconda3/lib/python3.5/site-packages/requests/api.py" ;,第67行,获取 退货请求(' get',url,params = params,** kwargs)
文件" /home/felix/anaconda3/lib/python3.5/site-packages/requests/api.py",第53行,请求中 return session.request(method = method,url = url,** kwargs) 文件" /home/felix/anaconda3/lib/python3.5/site-packages/requests/sessions.py",第468行,请求中 resp = self.send(prep,** send_kwargs)
文件" /home/felix/anaconda3/lib/python3.5/site-packages/requests/sessions.py",第570行,发送 adapter = self.get_adapter(url = request.url)
文件" /home/felix/anaconda3/lib/python3.5/site-packages/requests/sessions.py",第644行,在get_adapter中 提高InvalidSchema("找不到连接适配器'%s'"%url) requests.exceptions.InvalidSchema:找不到' htttp://en.wikipedia.org/wiki/list_of_S%26P_500_companies'
的连接适配器答案 0 :(得分:0)
你已经传递了一个带有htttp
的链接,即只有两个时你就有三个,这个代码在你运行它的任何地方都会出错。正确的网址是:
http://en.wikipedia.org/wiki/list_of_S%26P_500_companies
修复网址后,请求工作正常:
n [1]: import requests
In [2]: requests.get('http://en.wikipedia.org/wiki/list_of_S%26P_500_companies')
Out[3]: <Response [200]>
获取符号:
n [28]: for tr in soup.select("table.wikitable.sortable tr + tr"):
sym = tr.select_one("a.external.text")
if sym:
print(sym.text)
....:
MMM
ABT
ABBV
ACN
ATVI
AYI
ADBE
AAP
AES
AET
AFL
AMG
A
GAS
APD
AKAM
ALK
AA
AGN
ALXN
ALLE
ADS
ALL
GOOGL
GOOG
MO
AMZN
AEE
AAL
AEP
依此类推...............