Project

General

Profile

機能 #14

Updated by 寛正 鴨川 about 7 years ago

問題のある記事の内容をメール通知を行う

- URL
- 問題になった箇所
- 成果数

Scrapy自体にメール配信を想定した機能があるようなのでまずはその調査を行う。

## 調査結果

Scrapyのメール送信モジュールの利用で下記エラーが発生した。
以下のURLの通りScrapyの既知のバグと思われる。
https://github.com/scrapy/scrapy/issues/3478

{{collapse(スタックトレース)
~~~

Unhandled Error
Traceback (most recent call last):
File "/Users/kamogawa_hiromasa/dev/precision/venv/lib/python3.7/site-packages/twisted/python/log.py", line 103, in callWithLogger
return callWithContext({"system": lp}, func, *args, **kw)
File "/Users/kamogawa_hiromasa/dev/precision/venv/lib/python3.7/site-packages/twisted/python/log.py", line 86, in callWithContext
return context.call({ILogContext: newCtx}, func, *args, **kw)
File "/Users/kamogawa_hiromasa/dev/precision/venv/lib/python3.7/site-packages/twisted/python/context.py", line 122, in callWithContext
return self.currentContext().callWithContext(ctx, func, *args, **kw)
File "/Users/kamogawa_hiromasa/dev/precision/venv/lib/python3.7/site-packages/twisted/python/context.py", line 85, in callWithContext
return func(*args,**kw)
--- <exception caught here> ---
File "/Users/kamogawa_hiromasa/dev/precision/venv/lib/python3.7/site-packages/twisted/internet/selectreactor.py", line 149, in _doReadOrWrite
why = getattr(selectable, method)()
File "/Users/kamogawa_hiromasa/dev/precision/venv/lib/python3.7/site-packages/twisted/internet/tcp.py", line 243, in doRead
return self._dataReceived(data)
File "/Users/kamogawa_hiromasa/dev/precision/venv/lib/python3.7/site-packages/twisted/internet/tcp.py", line 249, in _dataReceived
rval = self.protocol.dataReceived(data)
File "/Users/kamogawa_hiromasa/dev/precision/venv/lib/python3.7/site-packages/twisted/protocols/tls.py", line 330, in dataReceived
self._flushReceiveBIO()
File "/Users/kamogawa_hiromasa/dev/precision/venv/lib/python3.7/site-packages/twisted/protocols/tls.py", line 300, in _flushReceiveBIO
self._flushSendBIO()
File "/Users/kamogawa_hiromasa/dev/precision/venv/lib/python3.7/site-packages/twisted/protocols/tls.py", line 252, in _flushSendBIO
bytes = self._tlsConnection.bio_read(2 ** 15)
builtins.AttributeError: 'NoneType' object has no attribute 'bio_read'
~~~
}}

## 対応内容

Scrapyのメール送信モジュールではなく、Python標準のsmtplibライブラリを用いる。

スクレイピング結果をItemオブジェクトに変換し、Pipelineクラスで処理する。
https://docs.scrapy.org/en/1.6/topics/item-pipeline.html

SMTPサーバー、メール送受信アドレスの設定はconfig.iniファイルに記述。
メール本文には発見箇所の数、ページ数とURL、NGワード、NGワードを含む文(HTMLタグ単位)、最新の成果発生日時の一覧を記載。

レポートメールサンプル(インタープリズムのサイトを「採用」をNGワードにクローリングした場合)

~~~
This is Precision report mail.
471 concerns found in 56 pages.

####################
URL: https://www.interprism.co.jp/
Word: 採用
Statement: 採用特設サイト

Latest CV Date: 2019-04-11 00:00:00
####################
URL: https://www.interprism.co.jp/
Word: 採用
Statement: 採用特設サイト

Latest CV Date: 2019-04-11 00:00:00
####################
URL: https://www.interprism.co.jp/
Word: 採用
Statement: 新卒採用サイト
Latest CV Date: 2019-04-11 00:00:00
####################
...
~~~

Back