Подтвердить что ты не робот

Извлечение результатов Google Scholar с использованием Python (или R)

Я бы хотел использовать python для очистки результатов поиска Google. Я нашел два разных script, один из которых - gscholar.py, а другой - scholar.py (может ли он использоваться как библиотека 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).

Это меня озадачивает. Я также попытался указать третий возможный аргумент (outformat=4; это формат BibTex), но это дает мне список ошибок функции. Один из моих коллег посоветовал мне импортировать BeautifulSoup и this перед запуском запроса, но также это не изменит проблему. Любые предложения по решению проблемы?

Я нашел код для R (см. ссылка) в качестве решения, но быстро заблокирован Google. Может быть, кто-то может предложить, как улучшить этот код, чтобы избежать блокировки? Любая помощь будет оценена! Спасибо!

4b9b3361

Ответ 1

Я предлагаю вам не использовать конкретные библиотеки для обхода определенных сайтов, а использовать общедоступные HTML-библиотеки, которые хорошо протестированы и имеют хорошо сформированную документацию, такую ​​как BeautifulSoup.

Для доступа к веб-сайтам с информацией обозревателя вы можете использовать класс открывателя url с настраиваемым пользовательским агентом:

from urllib import FancyURLopener
class MyOpener(FancyURLopener):
    version = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36'
openurl = MyOpener().open

И затем загрузите требуемый URL-адрес следующим образом:

openurl(url).read()

Для получения результатов учебы просто используйте http://scholar.google.se/scholar?hl=en&q=${query} url.

Чтобы извлечь фрагменты информации из извлеченного HTML файла, вы можете использовать этот фрагмент кода:

from bs4 import SoupStrainer, BeautifulSoup
page = BeautifulSoup(openurl(url).read(), parse_only=SoupStrainer('div', id='gs_ab_md'))

Этот фрагмент кода извлекает конкретный элемент div, который содержит количество результатов, показанных на странице результатов поиска Google Scholar.

Ответ 2

Google заблокирует вас... поскольку будет очевидно, что вы не браузер. А именно, они будут обнаруживать одну и ту же сигнатуру запроса, которая происходит слишком часто для человеческой деятельности....

Вы можете сделать:

Ответ 3

Похоже, что соскабливание с Python и R сталкивается с проблемой, когда Google Scholar видит ваш запрос в виде роботизированного запроса из-за отсутствия агента-пользователя в запросе. В StackExchange есть аналогичный вопрос о загрузке всех pdf файлов, связанных с веб-страницей, и ответ заставляет пользователя wget в Unix и пакет BeautifulSoup в Python.

Curl также представляется более перспективным направлением.

Ответ 4

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, но могу дать вам общий алгоритм для исправления этого:

  • используйте обычный браузер (firefox или что-то еще) для доступа к URL-адресу при мониторинге HTTP-трафика (мне нравится wirehark).
  • принять во внимание все заголовки, отправленные в соответствующем запросе http
  • попробуйте запустить script, а также отметьте заголовки
  • укажите разницу
  • установите R script, чтобы использовать заголовки, которые вы видели при просмотре трафика браузера.

Ответ 5

вот сигнатура вызова query()...

def query(searchstr, outformat, allresults=False)

таким образом, вам нужно указать по крайней мере параметр searchstr и outformat, а allresults - необязательный флаг/аргумент.

Ответ 6

Вы можете использовать Greasemonkey для выполнения этой задачи. Преимущество заключается в том, что Google не сможет обнаружить вас как бота, если вы дополнительно сохраните частоту запроса. Вы также можете посмотреть, как script работает в вашем окне браузера.

Вы можете научиться самостоятельно его кодировать или использовать script из одного из этих источников.