48206


以前の投稿で、[`QtWebKit`の画像や動画を見られるようにするには？](https://ja.stackoverflow.com/questions/47854/qtwebkit%E3%81%A7%E7%94%BB%E5%83%8F%E3%82%84%E5%8B%95%E7%94%BB%E3%82%92%E8%A6%8B%E3%82%89%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF)という質問を出し、ご指摘を受けましたので質問を分ける事にしました。

**したいこと**  
Google検索エンジンなどのように、文字などを適当なラインにいれれば、検索候補を出してくれるようなものを自分のアプリに備え付けたいと思っています。現在`QtWebKit`で、簡易的なブラウザを作っていて、ここに装着するようにしたいです。  
**見付けた手がかり**  
[自分のパソコンでpython検索エンジンを動かしたい！](https://ja.stackoverflow.com/questions/38146/%E8%87%AA%E5%88%86%E3%81%AE%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%81%A7-python%E6%A4%9C%E7%B4%A2%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%9F%E3%81%84)

質問を出してしまってからこの質問の存在に気づいたので、以前の質問よりは大幅に内容を変更しました。ですが、これと同じような仕組みを導入したいので、これと全く同じものを、とにかく備え付けてみようと考えました。（なお、自分はまだこれを備え付けた事がないので、どれほどのものかはわからないのですが・・・。多分調べても、これ以上のものは見つからないと思います。）  
**二の舞**  
そこで、このコードを実行してみようと思い、ダウンロードをして導入して、crawler.pyを実行してみると、私も、このようなエラーが起きてしまいました。

[code]

    ImportError: cannot import name 'MONGO_URL'
    
[/code]

そこで、リンク先にあるように、`from ..config import MONGO_URL`  
と打ってみました。  
すると、  

[code]

    ValueError: attempted relative import beyond top-level package
    
[/code]

となりました。  
リンク先の質問では、ここはうまくいっていたように思えたのですが、自分ではこのようなエラーが発生してしまったのです。  
リンク先の回答では、

[code]

    MONGO_URL = 'mongodb://localhost:27017/test'
    
[/code]

とするように書いてあったのでそうしてみました。それで上記のようなエラーが出ます。  
要は、このMONGO_URLの名前を別の空間から取得したいのだろうと思ったものですから、

[code]

    try:
        from config import MONGO_URL
    except ImportError as e:
        MONGO_URL = 'mongodb://localhost:27017/test'
    
[/code]

モジュール的な段階を完全に無視して、直接同一モジュール内で、MONGO_URLに値を入れ込んでやりました。ここで何かを大きく間違えた気がしていますが、（製作者の意図に沿わない方法なのではないかと考えています。）そのうえで、再度crawler.pyを実行してみました。  
エラーは全く発生しませんでしたが、その代わり、何も発生しませんでした。（トップモジュールではないからですね。）  
**私の経験値**  
`bs4,janome,pymongo,urllib.request,requests,config,argparse,flask`

**全て使った経験がありません。**経験値０です。レベル１でロマリアに行く感じ。  
しかし、質問者が、ここで、`python manage.py crawler`  
とコマンドを打っておられるのを看まして、自分も見様見真似で、同じようにしてみました。  
すると、

[code]

    F:\pysearch-master>python manage.py crawler
    Traceback (most recent call last):
      File "manage.py", line 12, in <module>
        crawl_web('http://docs.sphinx-users.jp/contents.html', 2)
      File "F:\pysearch-master\web_crawler\crawler.py", line 72, in crawl_web
        add_page_to_index(page_url, html)
      File "F:\pysearch-master\web_crawler\crawler.py", line 60, in add_page_to_index
        add_to_index(word, url)
      File "F:\pysearch-master\web_crawler\crawler.py", line 41, in add_to_index
        entry = col.find_one({'keyword': keyword})
      File "C:\Users\***\Anaconda3\lib\site-packages\pymongo\collection.py", line 1262, in find_one
        for result in cursor.limit(-1):
      File "C:\Users\***\Anaconda3\lib\site-packages\pymongo\cursor.py", line 1189, in next
        if len(self.__data) or self._refresh():
      File "C:\Users\***\Anaconda3\lib\site-packages\pymongo\cursor.py", line 1087, in _refresh
        self.__session = self.__collection.database.client._ensure_session()
      File "C:\Users\***\Anaconda3\lib\site-packages\pymongo\mongo_client.py", line 1558, in _ensure_session
        return self.__start_session(True, causal_consistency=False)
      File "C:\Users\***\Anaconda3\lib\site-packages\pymongo\mongo_client.py", line 1511, in __start_session
        server_session = self._get_server_session()
      File "C:\Users\***\Anaconda3\lib\site-packages\pymongo\mongo_client.py", line 1544, in _get_server_session
        return self._topology.get_server_session()
      File "C:\Users\***\Anaconda3\lib\site-packages\pymongo\topology.py", line 427, in get_server_session
        None)
      File "C:\Users\***\Anaconda3\lib\site-packages\pymongo\topology.py", line 199, in _select_servers_loop
        self._error_message(selector))
    pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。
    
[/code]

* * *

一体何が起きているのでしょうか？  
素直な初見では、階層構造がよくわからないし、製作者の意図がわからなかったです。

1.`config`モジュールが別階層で２つ存在している点。  
2.`web_crawler`モジュールから、`collection`の名前を呼び出しているのに、  
`web_crawler`モジュール内に、`collection`という名前のファイルが存在しない点。  
（私は、`web_crawler`というモジュール(このpysearch-
masterに元々あるやつではないもの）を、インストールしました。これと同じモジュールが`conda
install`できたからです。しかし、製作者は個人で同じ名前のモジュールを作成しています。そのどちらにも、`collection`という名前はなかったのですが・・・。）  
3. **name** == " **main** "コードが、`manage.py`と、`drop_collection.py`の  
両方に存在しているため、どちらをトップレベルのモジュールとして想定していたのかが私からは判断しにくかったということ。  
4.`drop_connection`モジュールの中で、`url_parse`という定義されていない変数が普通に使われていること。

5.`col`を、`collection as col`として呼び出しているのに、その後にすぐ、`col =
...`という形で、名前を生成し、変数をいれこんでいること。  
6.後、`conda install config`も出来た気がします。

私よりもずっとレベルが高い人が書いたコードでしょうから、謎が多いのですが、全てのモジュールの外観を最低でもつかむ必要があるかもしれません。しかし、既に解決済みの質問をなぞっていくとできるかなと思ったのですが、やはりそんな甘いものではありませんでした。コードの全体量は、合わせてもせいぜい１００行程度なのですが・・・。

* * *
[code]

    Windows-10 
    
    python3.6.3
    
[/code]


CC BY-SA 4.0
2018-08-27T14:32:50.943
47861
2018-09-08T03:05:57.243
2018-08-29T13:24:04.220
24284
24284
question
python mongodb beautifulsoup
pysearch-masterを導入したいのですが、pymongoでエラーが出ます。


上記の検索エンジン実装に際し、何ら経験がないようでしたら、  
この実装を試みられてはいかがでしょうか。

[Whoosh](https://whoosh.readthedocs.io/en/latest/intro.html)

pure Pythonで書かれているライブラリで、高速な検索が可能です。  
元々の質問が検索エンジンの搭載が目的であるならば、このライブラリが役に立つと思います。  
他のわからないライブラリ群については、おいおい勉強していくといいでしょう。


CC BY-SA 4.0
2018-09-08T03:05:57.243
48206
2018-09-08T03:05:57.243
24284
47861
answer