извлечь текст из гугл стипендиата

Я пытаюсь извлечь текст из тестового фрагмента, который гугл-ученый дает для определенного запроса. Под фрагментом текста я подразумеваю текст под заголовком (черным шрифтом). В настоящее время я пытаюсь извлечь его из html-файла с помощью python, но он содержит много дополнительных тестов, таких как

/div><div class="gs_fl"... и т. д.

Есть ли простой способ или код, который может помочь мне получить текст без этих избыточных текстов.


person ayush singhal    schedule 02.04.2013    source источник


Ответы (2)


Вам нужен парсер html:

import lxml.html

doc = lxml.html.fromstring(html)
text = doc.xpath('//div[@class="gs_fl"]').text_content()

Вы можете установить lxml с помощью «pip install lxml», но вам нужно будет создать его зависимости, и детали будут отличаться в зависимости от вашей платформы.

person twneale    schedule 02.04.2013
comment
используя указанную вами команду, я смогу проанализировать всю html-страницу или мне нужно каждый раз указывать разные xpath()? - person ayush singhal; 02.04.2013
comment
выдает мне эту ошибку: - AttributeError: объект «список» не имеет атрибута «text_content» - person ayush singhal; 02.04.2013

И старый, но может быть актуальным вопросом прямо сейчас. Используйте SelectorGadgets, чтобы легко получать селекторы CSS. Убедитесь, что вы используете прокси-сервер, иначе Google может заблокировать запрос, даже если вы попытаетесь сделать запрос через selenium.

Код и полный пример в онлайн-среде IDE:

from bs4 import BeautifulSoup
import requests, lxml, os

headers = {
    'User-agent':
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"
}

proxies = {
  'http': os.getenv('HTTP_PROXY')
}

html = requests.get('https://scholar.google.com/scholar?hl=en&as_sdt=0%2C5&q=samsung&oq=', headers=headers, proxies=proxies).text
soup = BeautifulSoup(html, 'lxml')

for result in soup.select('.gs_ri'):
  snippet = result.select_one('.gs_rs').text
  print(f"Snippet: {snippet}")

Часть вывода:

Snippet: Purpose–Extensive research has shown that country‐of‐origin (COO) information significantly affects product evaluations and buying behavior. Yet recently, a competing perspective has emerged suggesting that COO effects have been inflated in prior research …

В качестве альтернативы вы можете использовать API результатов органического поиска Google Scholar от SerpApi. Это платный API с бесплатной пробной версией на 5000 поисковых запросов.

По сути, он делает то же самое, что и скрипт выше, за исключением того, что вам не нужно думать о том, как решить CAPTCHA или найти хороший прокси (прокси).

Код для интеграции:

from serpapi import GoogleSearch
import os

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

search = GoogleSearch(params)
results = search.get_dict()

for result in results['organic_results']:
  print(f"Snippet: {result['snippet']}")

Часть вывода:

Snippet: Purpose–Extensive research has shown that country‐of‐origin (COO) information significantly affects product evaluations and buying behavior. Yet recently, a competing perspective has emerged suggesting that COO effects have been inflated in prior research …

Отказ от ответственности, я работаю в SerpApi.

person Dimitry Zub    schedule 23.05.2021