Shell代码直接执行,但不在PythonScript中执行

时间:2016-06-16 20:08:26

标签: python function shell beautifulsoup bs4

我写了一个使用 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'

的连接适配器

1 个答案:

答案 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

依此类推...............