python中的无声错误处理?

雷切尔

我得到了带有多个 URL 的 csv 文件。为方便起见,我将其读入熊猫数据框。稍后我需要做一些统计工作——pandas 很方便。它看起来有点像这样:

import pandas as pd
csv = [{"URLs" : "www.mercedes-benz.de", "electric" : 1}, {"URLs" : "www.audi.de", "electric" : 0}, {"URLs" : "ww.audo.e", "electric" : 0}, {"URLs" : "NaN", "electric" : 0}]
df = pd.DataFrame(csv)

我的任务是检查网站是否包含某些字符串,并添加一个额外的列,如果是,则为 1,否则为 0。例如:我想检查,是否www.mercedes-benz.de包含字符串car我执行以下操作:

for i, row in df.iterrows():
    page_content = requests.get(row['URLs'])
    if "car" in page_content.text:
        df.loc[i, 'car'] = '1'
    else:
        df.loc[i, 'car'] = '0' 

问题是:有时 URL 错误/丢失。我的小脚本导致错误。

如果 URL 错误/丢失,我该如何处理/抑制错误?并且,我如何df.loc[i, 'url_wrong'] = '1'在这些情况下使用来指示 URL 错误/丢失?

阿卜杜

尝试定义一个首先进行“汽车”检查的函数,然后使用.apply熊猫方法Series来获取您的1,0Wrong URL. 以下应该有所帮助:

import pandas as pd
import requests


data = [{"URLs" : "https://www.mercedes-benz.de", "electric" : 1},
        {"URLs" : "https://www.audi.de", "electric" : 0}, 
        {"URLs" : "https://ww.audo.e", "electric" : 0}, 
        {"URLs" : "NaN", "electric" : 0}]


def contains_car(link):
    try:
        return int('car' in requests.get(link).text)
    except:
        return "Wrong/Missing URL"


df = pd.DataFrame(data)

df['extra_column'] = df.URLs.apply(contains_car)


#                           URLs  electric extra_column
# 0  https://www.mercedes-benz.de         1            1
# 1           https://www.audi.de         0            1
# 2             https://ww.audo.e         0    Wrong/Missing URL
# 3                           NaN         0    Wrong/Missing URL

编辑:

您可以在 HTTP 请求返回的文本中搜索多个关键字。根据您设置的条件,这可以通过内置函数any或内置函数来完成allUsingany意味着查找任何关键字都应该返回 1,而 usingall意味着必须匹配所有关键字才能返回 1。在下面的示例中,我使用any了诸如“car”、“automobile”、“车辆':

import pandas as pd
import requests


data = [{"URLs" : "https://www.mercedes-benz.de", "electric" : 1},
        {"URLs" : "https://www.audi.de", "electric" : 0}, 
        {"URLs" : "https://ww.audo.e", "electric" : 0}, 
        {"URLs" : "NaN", "electric" : 0}]


def contains_keywords(link, keywords):
    try:
        output = requests.get(link).text
        return int(any(x in output for x in keywords))
    except:
        return "Wrong/Missing URL"


df = pd.DataFrame(data)
mykeywords = ('car', 'vehicle', 'automobile')
df['extra_column'] = df.URLs.apply(lambda l: contains_keywords(l, mykeywords))

应该产生:

#                            URLs  electric       extra_column
# 0  https://www.mercedes-benz.de         1                  1
# 1           https://www.audi.de         0                  1
# 2             https://ww.audo.e         0  Wrong/Missing URL
# 3                           NaN         0  Wrong/Missing URL

我希望这有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章