在数据帧中使用python请求多个url

时间:2017-08-07 19:28:19

标签: python pandas python-requests

我有一个使用pandas读取的CSV,看起来像:

                |    URL            | Status Code | 
--------------- | ------------------|-------------|
       0        | www.example.com   |    404      |
----------------|-------------------|-------------|
        1       | www.example.com/2 |   404       |

我想检查第二列上的网址是否仍然以404响应。我有以下代码:

url = df['URL']
urlData = requests.get(url).content
rawData = pd.read_csv(io.StringIO(urlData.decode('utf-8')))
print(rawData)

我收到以下错误:

  

InvalidSchema:找不到' 0 http://www.example.com

的连接适配器      

1 http://www.example.com/2

     

名称:URL,dtype:object'

我搜索了几个问题但找不到答案。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

requests.get不是broadcastable,因此您必须使用pandas.DataFrame.apply为每个网址拨打电话:

>>> df['New Status Code'] = df.URL.apply(lambda url: requests.get(url).status_code)
>>> df
   Status Code                URL  New Status Code
0          404    www.example.com              404
1          404  www.example.com/2              404

或使用numpy.vectorize

>>> vectorized_get = numpy.vectorize(lambda url: requests.get(url).status_code)
>>> df['New Status Code'] = vectorized_get(df.URL)

答案 1 :(得分:0)

df ['URL']将返回一系列数据,而不是单个值。我怀疑你的代码正在炸毁requests.get(url).content line。

你可以发布更多代码吗?

您可能需要查看应用功能:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html