如何使用python刮擦web并绕过错误

时间:2017-04-23 04:46:06

标签: python beautifulsoup

我有大约3000个网址,其中一些工作,而其中一些不在。我试过运行漂亮的汤,但我得到了一些不同的错误,这让我感到困惑 - 我不确定尝试什么样的尝试,除了我应该放入代码的块。我想要做的是忽略所有内部服务器错误网址,只使用那些没有错误的网址,并获取下面代码中所写的文本。

我的代码:

mega = [[]] # list in a list
for i in range(len(ab)): # ab as a dictionary with multiple keys
...     myurl = soc[i]['the_urls']
...     html = urllib2.urlopen(myurl).read()
...     soup = BeautifulSoup(html, "html.parser")
...     row = soup.findAll('tr')
...     for r in row:
...         mega.append([r.get_text()]) # scrape all the texts 

错误:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
  File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
  File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 435, in open
    response = meth(req, response)
  File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 548, in http_response
    'http', request, response, code, msg, hdrs)
  File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 473, in error
    return self._call_chain(*args)
  File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 407, in _call_chain
    result = func(*args)
  File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 556, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 500: Internal Server Error

错误是否意味着所有网址都存在同样的问题 - 内部服务器错误?在这种情况下,我想我可以做的一种方法是包括一个try和except块,如果没有http错误500则表示尝试,如果有错误则通过。

编辑:

我尝试使用以下代码来绕过错误,我不确定它是否正常工作,特别是如果&#34;传递&#34;或者&#34;继续&#34;做得对:

for i in range(len(soc)):
...     myurl = soc[i]['report_url']
...     while True:
...         try:
...             html = urllib2.urlopen(myurl).read()
...             break
...         except urllib2.HTTPError:
...             continue
...     soup = BeautifulSoup(html, "html.parser")
...     row = soup.findAll('tr')
...     for r in row:
...         mega.append([r.get_text()]) # scrape the text

1 个答案:

答案 0 :(得分:0)

  

错误是否意味着所有网址都存在同样的问题 - 内部服务器错误?

并非总是如此。因为5XX服务器错误的原因可能是:

  • 基础设施失败 - 网站上的所有网页都将无法访问
  • 特定页面上的某些错误,例如,在计算特定数据时,DivisionByZero

使用try/except来处理问题并转到下一个网址。

此外,如果你和你在一起可以制作某种类型的统计数据,如果你在某个域上看到很多错误 - 猜测它现在不起作用并将其网址移到列表的底部。