Извлеките результаты Google Scholar с помощью Python (или R)

Я хотел бы использовать python для очистки результатов поиска Google Scholar. Я нашел для этого два разных скрипта: один - 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. Может быть, кто-нибудь может подсказать, как улучшить этот код, чтобы избежать блокировки? Любая помощь будет оценена по достоинству! Спасибо!


person Flow    schedule 02.11.2012    source источник
comment
Я обновил свой ответ о том, как обойти блокировку доступа Google ...   -  person Sheena    schedule 05.11.2012


Ответы (7)


Я предлагаю вам не использовать определенные библиотеки для сканирования определенных веб-сайтов, а использовать библиотеки 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.

person Julia    schedule 07.04.2014
comment
Как вы составили строку с версией? - person Juh_; 02.12.2014
comment
Где в этом коде указать путь к сертификату? - person AlwaysLearning; 28.12.2016

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

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

  • Как делать запросы urllib2 через Tor в Python?
  • Запустите код на университетских компьютерах (может не помочь)
  • Использование Google Scholar API может стоить вам денег и не предоставлять вам все функции как вы можете видеть как гуманный обычный пользователь.

Изменить 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'}
person 0x90    schedule 02.11.2012
comment
Я пытаюсь получить одну страницу: requests.get("https://scholar.google.com/scholar?q=compressed+differential+heuristic"), но все равно получаю <Response [503]> - person AlwaysLearning; 28.12.2016
comment
@AlwaysLearning, Спасибо за поддержку моего первоначального утверждения. - person 0x90; 28.12.2016
comment
@ 0x90 Scholarly ведет себя одинаково для слишком большого количества запросов. - person Null Pointer; 16.06.2020

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

Curl также кажется более многообещающим направлением.

person y-i_guy    schedule 27.02.2014

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 или что-то еще) для доступа к URL-адресу при мониторинге HTTP-трафика (мне нравится wirehark)
  2. обратите внимание на все заголовки, отправленные в соответствующем HTTP-запросе
  3. попробуйте запустить свой скрипт, а также обратите внимание на заголовки
  4. Найди отличие
  5. настройте свой R-скрипт на использование заголовков, которые вы видели при изучении трафика браузера
person Sheena    schedule 02.11.2012

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

def query(searchstr, outformat, allresults=False)

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

person Cameron Sparr    schedule 02.11.2012
comment
что, похоже, противоречит их документации, не знаю, что сказать об этом .... - person Cameron Sparr; 02.11.2012
comment
Спасибо за ответ, но я уже пробовал это (извините за недостаточную ясность), например, когда я отправляю запрос (мой запрос, 4, allresults = False) - 4 должен быть BibTex, если я правильно понимаю - тогда я получаю следующее: запрос функции в gscholar.py в строке 66 response = urllib2.urlopen (request) function urlopen in in urllib2.py в строке 126 return _opener.open (url, data, timeout) function open in urllib2.py в строке 400 response = meth (req, response) function http_response в urllib2.py в строке 513 'http', request, response , код, сообщение, hdrs) и т. д. - person Flow; 02.11.2012
comment
хммм, похоже, тогда у вас могут быть две отдельные проблемы. Один из них - получение правильной сигнатуры вызова (обратите внимание, что формат не является необязательным аргументом, вы ДОЛЖНЫ указать его). Во-вторых, похоже, что urllib2 (стандартная библиотека Python для открытия URL-адресов) имеет проблемы с указанным вами URL-адресом. - person Cameron Sparr; 03.11.2012

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

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

person mab    schedule 26.08.2014

Вы можете использовать пакет google-search-results для извлечения данных из Академии Google. Он использует SerpApi - платный API с бесплатной пробной версией.

Полный пример

from serpapi import GoogleSearch
import os

params = {
    "engine": "google_scholar",
    "q": "coffee",
    "api_key": os.getenv("API_KEY")
}

client = GoogleSearch(params)
data = client.get_dict()

print("Organic results\n")

for result in data['organic_results']:
    print(f"""Title: {result['title']}
Result ID: {result['result_id']}
Link: {result['link']}

Snippet: {result['snippet']}
""")

    if 'resources' in result:
        print(f"Resource: {result['resources'][0]}")

Ответ

{
  "organic_results": [
    {
      "position": 0,
      "title": "Phenolic compounds in coffee",
      "result_id": "re9ssrU-exUJ",
      "type": "Html",
      "link": "http://www.scielo.br/scielo.php?pid=S1677-04202006000100003&script=sci_arttext",
      "snippet": "Phenolic compounds are secondary metabolites generally involved in plant adaptation to environmental stress conditions. Chlorogenic acids (CGA) and related compounds are the main components of the phenolic fraction of green coffee beans, reaching levels up to …",
      "publication_info": {
        "summary": "A Farah, CM Donangelo - Brazilian journal of plant physiology, 2006 - SciELO Brasil"
      },
      "resources": [
        {
          "title": "scielo.br",
          "file_format": "HTML",
          "link": "http://www.scielo.br/scielo.php?pid=S1677-04202006000100003&script=sci_arttext"
        }
      ],
      "inline_links": {
        "serpapi_cite_link": "https://serpapi.com/search.json?engine=google_scholar_cite&q=re9ssrU-exUJ",
        "html_version": "https://scholar.google.comhttp://www.scielo.br/scielo.php?pid=S1677-04202006000100003&script=sci_arttext",
        "cited_by": {
          "total": 608,
          "link": "https://scholar.google.com/scholar?cites=1547899847035383725&as_sdt=5,44&sciodt=0,44&hl=en",
          "serpapi_scholar_link": "https://serpapi.com/search.json?cites=1547899847035383725&engine=google_scholar&hl=en&q=Coffee"
        },
        "related_pages_link": "https://scholar.google.com/scholar?q=related:re9ssrU-exUJ:scholar.google.com/&scioq=Coffee&hl=en&as_sdt=0,44",
        "versions": {
          "total": 6,
          "link": "https://scholar.google.com/scholar?cluster=1547899847035383725&hl=en&as_sdt=0,44",
          "serpapi_scholar_link": "https://serpapi.com/search.json?cluster=1547899847035383725&engine=google_scholar&hl=en&q=Coffee"
        },
        "cached_page_link": "https://scholar.google.comhttp://scholar.googleusercontent.com/scholar?q=cache:re9ssrU-exUJ:scholar.google.com/+Coffee&hl=en&as_sdt=0,44"
      }
    },
    {
      "position": 1,
      "title": "Functional properties of coffee and coffee by-products",
      "result_id": "9WouRiFbIK4J",
      "link": "https://www.sciencedirect.com/science/article/pii/S0963996911003449",
      "snippet": "Coffee, one of the most popular beverages, is consumed by millions of people every day. Traditionally, coffee beneficial effects have been attributed solely to its most intriguing and investigated ingredient, caffeine, but it is now known that other compounds also contribute to …",
      "publication_info": {
        "summary": "P Esquivel, VM Jiménez - Food Research International, 2012 - Elsevier",
        "authors": [
          {
            "name": "P Esquivel",
            "link": "https://scholar.google.com/citations?user=EpwJXskAAAAJ&hl=en&oi=sra"
          },
          {
            "name": "VM Jiménez",
            "link": "https://scholar.google.com/citations?user=_P0h0B8AAAAJ&hl=en&oi=sra"
          }
        ]
      },
      "resources": [
        {
          "title": "uoregon.edu",
          "file_format": "PDF",
          "link": "https://pages.uoregon.edu/chendon/coffee_literature/2012%20Food%20Res.%20Int.,%20Uses%20for%20coffee%20waste.pdf"
        }
      ],
      "inline_links": {
        "serpapi_cite_link": "https://serpapi.com/search.json?engine=google_scholar_cite&q=9WouRiFbIK4J",
        "cited_by": {
          "total": 531,
          "link": "https://scholar.google.com/scholar?cites=12547128760323697397&as_sdt=5,44&sciodt=0,44&hl=en",
          "serpapi_scholar_link": "https://serpapi.com/search.json?cites=12547128760323697397&engine=google_scholar&hl=en&q=Coffee"
        },
        "related_pages_link": "https://scholar.google.com/scholar?q=related:9WouRiFbIK4J:scholar.google.com/&scioq=Coffee&hl=en&as_sdt=0,44",
        "versions": {
          "total": 9,
          "link": "https://scholar.google.com/scholar?cluster=12547128760323697397&hl=en&as_sdt=0,44",
          "serpapi_scholar_link": "https://serpapi.com/search.json?cluster=12547128760323697397&engine=google_scholar&hl=en&q=Coffee"
        }
      }
    },
    {
      "position": 2,
      "title": "Coffee constituents",
      "result_id": "xY3q9qnkN54J",
      "link": "https://books.google.com/books?hl=en&lr=&id=y0qA89vCr3MC&oi=fnd&pg=PT47&dq=Coffee&ots=pyKSUohpI7&sig=8qULQFDS2RydGAkXlRyVJoph4AU",
      "snippet": "Coffee has been for decades the most commercialized food product and most widely consumed beverage in the world. Since the opening of the first coffee house in Mecca at the end of the fifteenth century, coffee consumption has greatly increased all around the world …",
      "publication_info": {
        "summary": "A Farah - Coffee: Emerging health effects and disease …, 2012 - books.google.com"
      },
      "resources": [
        {
          "title": "academia.edu",
          "file_format": "PDF",
          "link": "http://www.academia.edu/download/52419982/IFTPressBook_Coffee_PreviewChapter.pdf"
        }
      ],
      "inline_links": {
        "serpapi_cite_link": "https://serpapi.com/search.json?engine=google_scholar_cite&q=xY3q9qnkN54J",
        "cited_by": {
          "total": 255,
          "link": "https://scholar.google.com/scholar?cites=11400832400354872773&as_sdt=5,44&sciodt=0,44&hl=en",
          "serpapi_scholar_link": "https://serpapi.com/search.json?cites=11400832400354872773&engine=google_scholar&hl=en&q=Coffee"
        },
        "related_pages_link": "https://scholar.google.com/scholar?q=related:xY3q9qnkN54J:scholar.google.com/&scioq=Coffee&hl=en&as_sdt=0,44",
        "versions": {
          "total": 7,
          "link": "https://scholar.google.com/scholar?cluster=11400832400354872773&hl=en&as_sdt=0,44",
          "serpapi_scholar_link": "https://serpapi.com/search.json?cluster=11400832400354872773&engine=google_scholar&hl=en&q=Coffee"
        }
      }
    }
  ]
}

Выход

Organic results

Title: Phenolic compounds in coffee
Result ID: re9ssrU-exUJ
Link: http://www.scielo.br/scielo.php?pid=S1677-04202006000100003&script=sci_arttext

Title: Functional properties of coffee and coffee by-products
Result ID: 9WouRiFbIK4J
Link: https://www.sciencedirect.com/science/article/pii/S0963996911003449

Title: Coffee constituents
Result ID: xY3q9qnkN54J
Link: https://books.google.com/books?hl=en&lr=&id=y0qA89vCr3MC&oi=fnd&pg=PT47&dq=coffee&ots=pyKSUokkMc&sig=sjDv_w50O-5_svJDJKPJ7hHJtRg

Title: All about coffee
Result ID: fGeQlvu-2_IJ
Link: https://books.google.com/books?hl=en&lr=&id=oJxpQX4ko7cC&oi=fnd&pg=PT1&dq=coffee&ots=Oih_E-45Y-&sig=KYyBOoSXwRdwOv5upyWwl0FzIq8

Title: Biotechnological potential of coffee pulp and coffee husk for bioprocesses
Result ID: Zu7aKNjvAUwJ
Link: https://www.sciencedirect.com/science/article/pii/S1369703X0000084X

Title: Biodiversity conservation in traditional coffee systems of Mexico
Result ID: pIjQPO7__AYJ
Link: https://conbio.onlinelibrary.wiley.com/doi/abs/10.1046/j.1523-1739.1999.97153.x

Title: Coffee flavor chemistry
Result ID: UwtLySK5iawJ
Link: https://books.google.com/books?hl=en&lr=&id=NQi1LYJxFvUC&oi=fnd&pg=PP13&dq=coffee&ots=dRSace3WYu&sig=5jyqtvqkL_jGDkWTLsLqksKiQUw

Title: Coffee and health: a review of recent human research
Result ID: fSVlrXX7dIUJ
Link: https://www.tandfonline.com/doi/abs/10.1080/10408390500400009

Title: M-Coffee: combining multiple sequence alignment methods with T-Coffee
Result ID: _3o-xhuGyg0J
Link: https://academic.oup.com/nar/article-abstract/34/6/1692/2401531

Title: Producing decaffeinated coffee plants
Result ID: VJySkcFsQ1EJ
Link: https://www.nature.com/articles/423823a

Если вам нужна дополнительная информация, ознакомьтесь с документацией по SerpApi или живая игровая площадка.

Уведомление: я работаю в SerpApi.

person Ilya Zub    schedule 01.04.2020
comment
Внимание для других (SerpApi, хотя и великолепно выглядящий API) требует ключа API для использования разработчиками, который, похоже, требует оплаты. - person Pelonomi Moiloa; 07.06.2021
comment
@ pelonomi-moiloa Спасибо за замечание. Я добавил это к своему ответу. - person Ilya Zub; 08.06.2021