2017-07-19 9 views
0

新聞を使って様々なメディアを見て、そこから記事をダウンロードするコードが少しあります。これは長い間うまくいきましたが、最近行動を開始しました。私は問題が何かを知ることができますが、私がPythonに初めているので、それに対処する最善の方法についてはわかりません。基本的には(私は思う)時折不正な形式のWebアドレスがスクリプトを完全にクラッシュさせないように修正し、代わりにそのWebアドレスを使用せずに他のサイトに移動できるようにする必要があります。私が使用して記事をダウンロードしようとすると新聞で記事の例外を処理する

エラーの起源は次のとおりです。

article.download() 

いくつかの記事を(彼らは明らかに、毎日を変更する)次のエラーがスローされますが、スクリプトが実行され続け:

Traceback (most recent call last): 
     File "C:\Anaconda3\lib\encodings\idna.py", line 167, in encode 
     raise UnicodeError("label too long") 
    UnicodeError: label too long 

    The above exception was the direct cause of the following exception: 

    Traceback (most recent call last): 
    File "C:\Anaconda3\lib\site-packages\newspaper\mthreading.py", line 38, in run 
     func(*args, **kargs) 
    File "C:\Anaconda3\lib\site-packages\newspaper\source.py", line 350, in download_articles 
     html = network.get_html(url, config=self.config) 
    File "C:\Anaconda3\lib\site-packages\newspaper\network.py", line 39, in get_html return get_html_2XX_only(url, config, response) 
    File "C:\Anaconda3\lib\site-packages\newspaper\network.py", line 60, in get_html_2XX_only url=url, **get_request_kwargs(timeout, useragent)) 
    File "C:\Anaconda3\lib\site-packages\requests\api.py", line 72, in get return request('get', url, params=params, **kwargs) 
    File "C:\Anaconda3\lib\site-packages\requests\api.py", line 58, in request return session.request(method=method, url=url, **kwargs) 
    File "C:\Anaconda3\lib\site-packages\requests\sessions.py", line 502, in request resp = self.send(prep, **send_kwargs) 
    File "C:\Anaconda3\lib\site-packages\requests\sessions.py", line 612, in send r = adapter.send(request, **kwargs) 
    File "C:\Anaconda3\lib\site-packages\requests\adapters.py", line 440, in send timeout=timeout 
    File "C:\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 600, in urlopen chunked=chunked) 
    File "C:\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 356, in _make_request conn.request(method, url, **httplib_request_kw) 
    File "C:\Anaconda3\lib\http\client.py", line 1107, in request self._send_request(method, url, body, headers) 
    File "C:\Anaconda3\lib\http\client.py", line 1152, in _send_request self.endheaders(body) 
    File "C:\Anaconda3\lib\http\client.py", line 1103, in endheaders  self._send_output(message_body) 
    File "C:\Anaconda3\lib\http\client.py", line 934, in _send_output self.send(msg) 
    File "C:\Anaconda3\lib\http\client.py", line 877, in send  self.connect() 
    File "C:\Anaconda3\lib\site-packages\urllib3\connection.py", line 166, in connect conn = self._new_conn() 
    File "C:\Anaconda3\lib\site-packages\urllib3\connection.py", line 141, in _new_conn (self.host, self.port), self.timeout, **extra_kw) 
    File "C:\Anaconda3\lib\site-packages\urllib3\util\connection.py", line 60, in create_connection for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 
    File "C:\Anaconda3\lib\socket.py", line 733, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 
UnicodeError: encoding with 'idna' codec failed (UnicodeError: label too long) 

次のビットは、そのように私は、持っているデータフレームの特定の要素を解析し、それぞれの記事に自然言語処理を実行し、書き込みすることになっています

(これも少しずさんかもしれないが、それは別の日の問題です)

これは、それがエラーとそれらのURLのいずれかになるまで正常に動作して、記事の例外を投げると、スクリプトがクラッシュ:

C:\Anaconda3\lib\site-packages\PIL\TiffImagePlugin.py:709: UserWarning: Corrupt EXIF data. Expecting to read 2 bytes but only got 0. 
    warnings.warn(str(msg)) 

    ArticleException       Traceback (most recent call last) <ipython-input-17-2106485c4bbb> in <module>() 
      4 for paper in papers: 
      5  for article in paper.articles: 
    ----> 6   article.parse() 
      7   print(article.title) 
      8   article.nlp() 

    C:\Anaconda3\lib\site-packages\newspaper\article.py in parse(self) 
     183 
     184  def parse(self): 
    --> 185   self.throw_if_not_downloaded_verbose() 
     186 
     187   self.doc = self.config.get_parser().fromstring(self.html) 

    C:\Anaconda3\lib\site-packages\newspaper\article.py in throw_if_not_downloaded_verbose(self) 
     519   if self.download_state == ArticleDownloadState.NOT_STARTED: 
     520    print('You must `download()` an article first!') 
    --> 521    raise ArticleException() 
     522   elif self.download_state == ArticleDownloadState.FAILED_RESPONSE: 
     523    print('Article `download()` failed with %s on URL %s' % 

    ArticleException: 

これでスクリプトを終了しないようにするにはどうすればよいですか?私はどこでユニコードエラーを取得しているか、またはそれらの悪いアドレスを見落とすように言って解析段階で、ダウンロードステージでそれを対処する必要がありますか?そして、私はその訂正をどのように実行するのでしょうか?

本当にありがとうございます。

答えて

0

私は同じ問題を持っていたし、一般的に除いを使用してにもかかわらず:を渡す推奨されません、次のことが私の仕事:

try: 
     a.parse() 
     file.write(a.title+'\n') 
    except : 
     pass