2

xgoogleを使用しようとしていましたが、3 年間更新されておらず、1 ページあたり 100 の結果を設定しても、結果が 5 つしか得られません。問題なく xgoogle を使っている人がいたら教えてください。

現在、利用可能な (どうやら) ラッパーは xgoogle のみであるため、mechanize などの何らかのブラウザを使用することもできますが、それではコードが完全に google HTML に依存するようになり、大幅に変更される可能性があります。

最後のオプションは、Google が提供するカスタム検索 API を使用することですが、1 日あたり 100 リクエストの制限とその後の価格設定があります。

どの方向に進むべきか、あなたが知っている他のオプションは何か、あなたにとって何がうまくいくかについて、助けが必要です.

ありがとう !

4

2 に答える 2

2

マイナーパッチのみが必要です。

関数 GoogleSearch._extract_result (search.py​​ の 237 行目) は GoogleSearch._extract_description (258 行目) を呼び出しますが、失敗すると _extract_result はほとんどの結果で None を返すため、予想よりも少ない結果しか表示されません。

修理:

search.py​​ で、259 行目を次のように変更します。

desc_div = result.find('div', {'class': re.compile(r'\bs\b')})

これに:

desc_div = result.find('span', {'class': 'st'})

私は以下を使用してテストしました:

#!/usr/bin/python
#
# This program does a Google search for "quick and dirty" and returns
# 200 results.
#

from xgoogle.search import GoogleSearch, SearchError

class give_me(object):
    def __init__(self, query, target):
        self.gs = GoogleSearch(query)
        self.gs.results_per_page = 50
        self.current = 0
        self.target = target
        self.buf_list = []

    def __iter__(self):
        return self

    def next(self):
        if self.current >= self.target:
            raise StopIteration
        else:
            if(not self.buf_list):
                self.buf_list = self.gs.get_results()
            self.current += 1
            return self.buf_list.pop(0)

try:
    sites = {}
    for res in give_me("quick and dirty", 200):
        t_dict = \
        {
            "title" : res.title.encode('utf8'),
            "desc" : res.desc.encode('utf8'),
            "url" : res.url.encode('utf8')
        }
        sites[t_dict["url"]] = t_dict
    print t_dict
except SearchError, e:
    print "Search failed: %s" % e
于 2013-07-10T05:52:59.233 に答える
1

私はあなたが何でxgoogleあるかを誤解していると思います。ラッパーxgoogleではありません。ブラウザで人間のユーザーになりすまして、結果をスクレイピングするライブラリです。2009 年の時点では、Google の検索クエリと結果ページの形式に大きく依存しているため、2013 年に同じように機能しなくても不思議ではありません。詳細については、発表のブログ投稿を参照してください。

もちろん、xgoogleソースをハックして Google の現在の形式で動作させることはできます (結局のところ、それらはxgoogle偶然に壊れただけで、それほどひどくはありません…)。


その間、あなたは Google の利用規約を回避しようとしています:

当社のサービスを悪用しないでください。たとえば、当社のサービスに干渉したり、当社が提供するインターフェースや指示以外の方法を使用してサービスにアクセスしようとしたりしないでください。

彼らはあなたが何をしようとしているのかについて具体的に尋ねられており、彼らの答えは次のとおりです。

Google の利用規約では、Google からの事前の明示的な許可なしに、いかなる種類の自動クエリをシステムに送信することも許可していません。

そして、あなたはそれがあなたがやりたいことだと明示的に言っています:

最後のオプションは、Google が提供するカスタム検索 API を使用することですが、1 日あたり 100 リクエストの制限とその後の価格設定があります。

そのため、Google 検索が提供するインターフェース以外の方法を使用して Google 検索にアクセスする方法を探しています。これは、料金を支払わずに無料の使用量割り当てを意図的に回避しようとする試みです。彼らはあなたのコードを壊すために何でもする権利を完全に持っています。

(プログラムが結果をスクレイピングしているときは、誰も広告を見ていないことに注意してください。広告はすべての費用を支払うものです。)


もちろん、誰もあなたに Google の使用を強制しているわけではありません。EntireWeb には、無料の「無制限」(「使いすぎない限り、制限を指定していない」など) の検索 API があります。Bing はより高いクォータを提供し、日単位ではなく月単位で償却されます。Yahoo BOSS は柔軟性があり、非常に安価です (十分に安くない場合は、低品質の結果を提供する「割引サーバー」も提供します)。どれもあなたにとって十分ではない場合は、Google にお金を払ってください。

于 2013-07-10T01:51:34.620 に答える