首页 > 解决方案 > 如何检查存储在 CSV 文件中的多个 URL 的 URL 状态并将结果保存到新的 CSV 文件

问题描述

我是 python 新手,目前正在尝试实现以下目标:

我想检查 input.csv 文件中多个 URL 的 HTTP 响应状态代码:

id    url
1    https://www.google.com
2    https://www.example.com
3    https://www.testtesttest.com
...

并将结果另存为“状态”列,在我的 output.csv 文件中标记那些已关闭或存在其他问题的 URL:

id    url                            status
1    https://www.google.com          All good!
2    https://www.example.com         All good!
3    https://www.testt75esttest.com    Down
...

到目前为止,我正在尝试以下方法,但没有成功::

import requests
import pandas as pd
import requests.exceptions

df = pd.read_csv('path/to/my/input.csv')

urls = df.T.values.tolist()[1]


try:
    r = requests.get(urls)
    r.raise_for_status()  
except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
    print "Down"
except requests.exceptions.HTTPError:
    print "4xx, 5xx"
else:
    print "All good!"

不知道如何获得上述结果并将其另存为 output.csv 文件中的新列:

df['status'] = #here the result 
df.to_csv('path/to/my/output.csv', index=False)

有人可以帮忙吗?提前致谢!

标签: pandasweb-scrapingpython-requests

解决方案


id  url
1   https://www.google.com
2   https://www.example.com
3   https://www.testtesttest.com

将以上内容复制到剪贴板。然后,运行以下代码。您需要遍历 url 并将状态附加到列表中。然后,将列表设置为新列。

import requests
import pandas as pd
import requests.exceptions
df = pd.read_clipboard()
df

urls = df['url'].tolist()
status = []
for url in urls:
    try:
        r = requests.get(url)
        r.raise_for_status()
    except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
        status.append("Down")
    except requests.exceptions.HTTPError:
        status.append("4xx, 5xx")
    else:
        status.append("All good!")
df['status'] = status
df.to_csv('path/to/my/output.csv', index=False)

推荐阅读