如何用Python和绕过错误刮擦Web



我有大约3000个URL,其中一些URL工作,而其中一些则无法使用。我尝试运行美丽的汤,但我会遇到一些不同的错误,这使我感到困惑 - 我不确定除了应该放入代码中的块外,我不确定什么样的尝试。我想做的是忽略所有内部严重错误URL,而仅与没有错误的那些错误一起使用,并按照下面的代码中的文本获取文本。

我的代码:

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

错误是否意味着所有URL都有相同的问题 - 内部服务器错误?在这种情况下,我想我可以做的一种方法是包括一个尝试和除外,除了没有http错误500的块外,如果有一个。

编辑:

我尝试使用以下代码绕过错误,我不确定它是否有效,尤其是在"通过"或"继续"做正确的事情时:

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

错误是否意味着所有URL都有相同的问题 - 内部服务器错误?

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

  • 基础架构失败 - 网站上的所有页面都无法访问
  • 在计算该特定数据的同时,在特定页面上的某些错误

使用try/except处理问题,然后转到下一个URL。

另外,如果您与您进行某种类型的统计信息,并且如果您在某些域上看到许多错误 - 猜测它现在不起作用,并将其URL移至列表的底部。

相关内容

最新更新