我有大约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移至列表的底部。