Python web抓取,如果出错,跳过url

Python web抓取,如果出错,跳过url,python,error-handling,web-scraping,python-requests,Python,Error Handling,Web Scraping,Python Requests,我正试图抓取一个站点(大约7000个链接,全部在一个列表中),由于我的方法,这需要很长时间,我想我可以接受(因为这意味着不被发现)。但是,如果我在尝试检索页面时遇到任何类型的错误,我可以跳过它吗??现在,如果有错误,代码就会中断并给我一堆错误消息。这是我的密码: 集合是列表和结果文件的列表。基本上,我正在尝试使用get\u url\u data()(我有一个问题要感谢)和urlist中的所有url运行一个循环。我有一个名为HTTPError的东西,但它似乎不能处理所有的错误,因此这篇文章。在一个

我正试图抓取一个站点(大约7000个链接,全部在一个列表中),由于我的方法,这需要很长时间,我想我可以接受(因为这意味着不被发现)。但是,如果我在尝试检索页面时遇到任何类型的错误,我可以跳过它吗??现在,如果有错误,代码就会中断并给我一堆错误消息。这是我的密码:

集合
是列表和结果文件的列表。基本上,我正在尝试使用
get\u url\u data()
(我有一个问题要感谢)和
urlist
中的所有url运行一个循环。我有一个名为
HTTPError
的东西,但它似乎不能处理所有的错误,因此这篇文章。在一个相关的任务中,获得一个无法处理的url列表也很好,但这不是我主要关心的问题(但如果有人能告诉我怎么做就好了)

我认为主要的错误代码是这个,它触发了其他错误,因为在处理上述异常期间,出现了一系列以
开头的错误,另一个异常发生了

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 319, in _make_request
    httplib_response = conn.getresponse(buffering=True)
TypeError: getresponse() got an unexpected keyword argument 'buffering'

您可以使您的
try catch
块如下所示

try:
    r = requests.get(url, timeout=10)
    r.raise_for_status()

except Exception:
    return
Exception
类将处理所有错误和异常

如果要获取异常消息,可以在
except
块中打印此消息。然后,在引发异常之前,必须先实例化异常

except Exception as e:
    print(e.message)
    return

你通常会犯什么样的错误?它们是否都与网页抓取有关,或者是来自其他方面?错误被抛出到哪里?如果您只是扩展
块,请尝试
,但
块除外,您可能可以修复issue@Dannnno我会粘贴错误代码,但有点长。我将发布我认为主要的内容。如果你看一下,你会发现只有一个
TypeError
,而不是
HTTPError
。如果扩展Exception块(例如
Exception
),您应该能够捕获所有这些(尽管这通常不是很好的做法)@Dannnno谢谢,那么最佳做法是什么?另外,我没有编写一些代码,那么
returnnone
是什么意思?是停止一切,还是只是跳过?如果它正在跳过,我是否可以以某种方式存储导致跳过的url?如果我得到一个HTTPError,它仍然在运行代码的其余部分,即使这样做没有任何好处?最好的做法是显式地捕获预期发生的每个异常,以便仍然注意到任何意外情况(
除了HTTPError,TypeError
return None
将值
None
返回到调用函数的位置-函数的求值不会超过该点。如果你想获得有问题的url,你必须将return语句更改为类似
return url
的内容,或者你必须更改for loop中的逻辑谢谢,@Dannno也差不多这么说,但我喜欢你添加选项以查看错误消息的方式。当它打印消息时,是退出程序还是继续?不,不会。它将在控制台中打印错误消息,程序将继续运行。您也可以将其写入日志文件。@salmanwahed是否有直接方法将其写入日志文件?当然可以。切记:
except Exception as e:
    print(e.message)
    return