Анализ результатов Google Scholar с помощью Python и BeautifulSoup - PullRequest
0 голосов
/ 27 мая 2018

Учитывая типичный поиск по ключевым словам в Google Scholar (см. Скриншот), я хочу получить словарь, содержащий title и url каждой публикации, появляющейся на странице (например, *).1005 *}.

enter image description here

Чтобы получить страницу результатов из Google Scholar, я использую следующий код:

from urllib import FancyURLopener, quote_plus
from bs4 import BeautifulSoup

class AppURLOpener(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 = AppURLOpener().open
query = "Vicia faba"
url = 'https://scholar.google.com/scholar?q=' + quote_plus(query) + '&ie=UTF-8&oe=UTF-8&hl=en&btnG=Search'
#print url
content = openurl(url).read()
page = BeautifulSoup(content, 'lxml')
print page

Этот код правильно возвращает страницу результатов в (очень некрасивом) формате HTML, однако я не смог продвинуться дальше этого уровня, так как не мог понять, как использовать BeautifulSoup (с которым я не слишком знаком)для анализа страницы результатов и извлечения данных.

Обратите внимание, что проблема связана с разбором и извлечением данных со страницы результатов, а не с самим Google Scholar, поскольку страница результатов правильно получена с помощью вышеуказанногокод.

Может кто-нибудь дать несколько советов? Заранее спасибо!

1 Ответ

0 голосов
/ 27 мая 2018

Проверка содержимого страницы показывает, что результаты поиска заключены в тег h3 с атрибутом class="gs_rt".Вы можете использовать BeautifulSoup, чтобы извлечь только эти теги, а затем получить заголовок и URL-адрес из тега <a> внутри каждой записи.Запишите каждый заголовок / URL-адрес в диктовку и сохраните в списке диктов:

import requests
from bs4 import BeautifulSoup

query = "Vicia%20faba"
url = 'https://scholar.google.com/scholar?q=' + query + '&ie=UTF-8&oe=UTF-8&hl=en&btnG=Search'

content = requests.get(url).text
page = BeautifulSoup(content, 'lxml')
results = []
for entry in page.find_all("h3", attrs={"class": "gs_rt"}):
    results.append({"title": entry.a.text, "url": entry.a['href']})

Вывод:

[{'title': 'Cytosolic calcium regulates ion channels in the plasma membrane of Vicia faba guard cells',
  'url': 'https://www.nature.com/articles/338427a0'},
 {'title': 'Hydrogen peroxide is involved in abscisic acid-induced stomatal closure in Vicia faba',
  'url': 'http://www.plantphysiol.org/content/126/4/1438.short'},
 ...]

Примечание. Я использовал requests вместо urllib,поскольку мой urllib не будет загружаться FancyURLopener.Но синтаксис BeautifulSoup должен быть одинаковым, независимо от того, как вы получаете содержимое страницы.

...