###前提・実現したいこと
現在、chrome拡張機能を作っています。ユーザーが見たページのURLをサーバー側に送って、そのURL先のページの本文を抽出しそれをmecabで形態素分析したいです。
###追加事項
(2017/09/10 19:22追加)
本文抽出したデータをデータベースに送ってみると、きちんとstr型として保存されていました。そのため、本質的に問題は以下の⑵だけになります。
###発生している問題・エラーメッセージ
問題点は2つあります。
⑴str型で本文抽出ができない。←解決しました!
<Python, readability, html2text, urllib> HTMLから本文抽出。を参考に、pythonのcgiで本文を抽出しようとしました。しかし、取得したデータをjavascriptに送ってコンソールに表示させると、bytes型として出てきます。デコードしても直りませんでした。
また、
<!--: spam Content-Type: text/html <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> --> </font> </font> </font> </script> </object> </blockquote> </pre> </table> </table> </table> </table> </table> </font> </font> </font>
というエラーも出ていました。
⑵mecabが動かない
MeCab と mecab-ipadic-NEologd と Python3 で形態素解析を参考に、文章をmecabで形態素解析しようとしました。しかし、⑴と同じように以下のエラーが出ました。
<!--: spam Content-Type: text/html <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> --> </font> </font> </font> </script> </object> </blockquote> </pre> </table> </table> </table> </table> </table> </font> </font> </font>
###該当のソースコード
以下が実行させたpythonコードです。
python
1#!/usr/local/bin/python3.6 2 3print("Content-Type: text/html; charset=UTF-8") 4print() 5 6import cgi 7import cgitb; cgitb.enable() 8import json 9from readability.readability import Document 10import urllib 11import html2text 12import MeCab 13 14form = cgi.FieldStorage() #ajaxでユーザーが訪れたurlを送っています。 15for key in form.keys(): 16 url = form.getvalue(key) #ここのurlはきちんと取得できています。 17 html = urllib.request.urlopen(url) 18 s = html.read() 19 print(s) #bytes型として帰ってきます。 20 article = Document(s).summary() 21 text = html2text.html2text(article) 22 text = text.decode("utf-8") 23 print(text) #bytes型として帰ってきます。 24 25 tagger = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') 26 tagger.parse('') #python3でmecabを実行するにはこれが必要らしいので入れました。 27 input = '今週末は金剛山に登りに行って、そのあと新世界かどっかで打ち上げしましょ。' #⑴と⑵の問題を別々に検証するために、mecabにはあらかじめ用意した例文を入れます。 28 29 result = tagger.parse(input) 30 print(result) 31 32 node = tagger.parseToNode(input) 33 target_parts_of_speech = ('名詞', ) 34 while node: 35 if node.feature.split(',')[0] in target_parts_of_speech: 36 print(node.surface) 37 node = node.next
###試したこと
<!--: spam Content-Type: text/html <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> --> </font> </font> </font> </script> </object> </blockquote> </pre> </table> </table> </table> </table> </table> </font> </font> </font>
というエラーがよく出るので、このエラーについて検索してみました。その結果、これが例外処理のエラーということがわかったのですが、このエラーをどうやって直せるのかわかりません。
###補足情報(言語/FW/ツール等のバージョンなど)
開発環境は以下の通りです。
- macOS Sierra
- python3
- MAMP バージョン4.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。