15

Pythonを使用してGoogleScholarの検索結果を取得したいと思います。それを行うための2つの異なるスクリプトを見つけました。1つはgscholar.pyで、もう1つはですscholar.py(1つはPythonライブラリとして使用できますか?)。

さて、私はPythonにまったく慣れていないので、明らかなことを見逃してしまったらごめんなさい!

問題はgscholar.py、READMEファイルで説明されているように使用すると、結果として得られることです。

query() takes at least 2 arguments (1 given)

別の引数を指定しても(たとえばgscholar.query("my query", allresults=True)

query() takes at least 2 arguments (2 given)

これは私を困惑させます。また、3番目の可能な引数(outformat=4;はBibTex形式)を指定しようとしましたが、これにより関数エラーのリストが表示されます。同僚から、クエリを実行する前にBeautifulSoupとこれをインポートするようにアドバイスされましたが、それでも問題は変わりません。問題を解決する方法について何か提案はありますか?

解決策としてRのコード(リンクを参照)を見つけましたが、すぐにgoogleによってブロックされました。たぶん誰かがブロックされないようにそのコードをどのように改善するかを提案することができますか?どんな助けでもいただければ幸いです!ありがとう!

4

7 に答える 7

8

あなたがブラウザではないことが明らかになるので、Google はあなたをブロックします。つまり、合理的な人間の活動と比較して、あまりにも頻繁に発生する同じ要求署名を検出します。

できるよ:


編集 2020 :

あなたは学術的にチェックしたいかもしれません

>>> search_query = scholarly.search_author('Marty Banks, Berkeley')
>>> print(next(search_query))
{'_filled': False,
 'affiliation': 'Professor of Vision Science, UC Berkeley',
 'citedby': 17758,
 'email': '@berkeley.edu',
 'id': 'Smr99uEAAAAJ',
 'interests': ['vision science', 'psychology', 'human factors', 'neuroscience'],
 'name': 'Martin Banks',
 'url_picture': 'https://scholar.google.com/citations?view_op=medium_photo&user=Smr99uEAAAAJ'}
于 2012-11-02T18:10:18.077 に答える
4

Python と R でスクレイピングすると、リクエストにユーザー エージェントがないため、Google Scholar がリクエストをロボット クエリと見なすという問題が発生するようです。Web ページからリンクされたすべての pdf をダウンロードすることについて、StackExchange に同様の質問があり、その答えはユーザーを Unix の wget と Python の BeautifulSoup パッケージに導きます。

カールもより有望な方向のようです。

于 2014-02-27T04:14:19.920 に答える
2

COPythonは正しいように見えますが、ここに例による少しの説明があります...

fを考えてみましょう:

def f(a,b,c=1):
    pass

fは、何があってもaとbの値を期待します。cは空白のままにすることができます。

f(1,2)     #executes fine
f(a=1,b=2) #executes fine
f(1,c=1)   #TypeError: f() takes at least 2 arguments (2 given)

Googleによってブロックされているという事実は、おそらくヘッダーのユーザーエージェント設定が原因です...私はRに慣れていませんが、これを修正するための一般的なアルゴリズムを提供できます。

  1. 通常のブラウザ(Firefoxなど)を使用して、HTTPトラフィックを監視しながらURLにアクセスします(wiresharkが好きです)
  2. 適切なhttpリクエストで送信されたすべてのヘッダーに注意してください
  3. スクリプトを実行してみて、見出しにも注意してください
  4. 違いを見つける
  5. ブラウザのトラフィックを調べるときに見たヘッダーを使用するようにRスクリプトを設定します
于 2012-11-02T18:26:48.530 に答える
1

これが query() の呼び出しシグネチャです...

def query(searchstr, outformat, allresults=False)

したがって、少なくとも searchstr と outformat を指定する必要があり、allresults はオプションのフラグ/引数です。

于 2012-11-02T18:10:41.867 に答える
0

このタスクにはGreasemonkeyを使用することをお勧めします。利点は、さらにリクエストの頻度を低く抑えると、Google があなたをボットとして検出できなくなることです。ブラウザ ウィンドウでスクリプトの動作を確認することもできます。

自分でコーディングする方法を学ぶことも、これらのソースのいずれかからスクリプトを使用することもできます。

于 2014-08-26T10:15:38.617 に答える