Есть ли процедура для ввода каждой ссылки результатов Google и извлечения текста? - PullRequest
0 голосов
/ 09 мая 2020

Всего новеньких ie здесь в поисках вашей мудрости (1-й пост / вопрос тоже)! Заранее благодарим вас за ваше время и терпение.

Я надеюсь автоматизировать поиск научной литературы c в Google Scholar, используя специально Selenium (через Chrome) с Python. Я предполагаю ввести topi c, по которому будет выполняться поиск в Google Scholar, а затем ввести каждую ссылку статей / книг в результатах, извлечь реферат / резюме и распечатать их на консоли (или сохранить их в тексте). файл). Это будет простой способ определить релевантность статей в результатах для материала, который я пишу.

На данный момент я могу посетить ученого Google, ввести текст в строку поиска, отфильтровать по дате (от самого нового к самому старому) и извлеките каждую ссылку из результатов. Мне не удалось написать al oop, который будет вводить ссылку на каждую статью и извлекать отрывки (или другой соответствующий текст), поскольку каждый результат мог быть закодирован по-разному.

С уважением,

  • JP (Aotus_californicus)

Пока это мой код:

   import pandas as pd
   from selenium import webdriver
   from selenium.webdriver.common.keys import Keys


   def get_results(search_term):
       url = 'https://scholar.google.com'
       browser = webdriver.Chrome(executable_path=r'C:\Users\Aotuscalifornicus\Downloads\chromedriver_win32\chromedriver.exe')

       browser.get(url)
       searchBar = browser.find_element_by_id('gs_hdr_tsi')
       searchBar.send_keys(search_term)
       searchBar.submit()
       browser.find_element_by_link_text("Trier par date").click()
       results = []
       links = browser.find_elements_by_xpath('//h3/a')
       for link in links:
           href = link.get_attribute('href')
           print(href)
           results.append(href)


       browser.close()
   get_results('Primate thermoregulation')

1 Ответ

0 голосов
/ 10 мая 2020

Напишите свой комментарий и используя его как основу для своего ответа:

Чтобы уточнить, я хочу написать al oop, который вводит каждую ссылку и извлекает элемент за тегом, для пример

Откройте новое окно или запустите новый сеанс драйвера, чтобы проверить ссылки в результатах. Затем используйте правило для извлечения нужного текста. Вы можете повторно использовать существующий сеанс драйвера, если сначала извлечете все href или создадите новую вкладку по мере получения каждой ссылки на результат.

for link in links:
    href = link.get_attribute('href')
    print(href)
    results.append(href)

extractor = webdriver.Chrome(executable_path=...)  # as above
for result in results:
    extractor.get(url)
    section_you_want = extractor.find_elements_by_xpath(...)  # or whichever set of rules
    # other code here

extractor.close()

Вы можете настроить правила для использования с базой find_element() или find_elements() искателей, а затем перебирайте их, пока не получите результат (лучше всего проверять наличие элемента, длину текста или что-то разумное и полезное). Каждое из правил представляет собой кортеж, который может быть передан базовой функции поиска:

from selenium.webdriver.common.by import By  # see the docs linked above for the available `By` class attributes

rules = [(By.XPATH, '//h3/p'),
         (By.ID, 'summary'),
         (By.TAG_NAME, 'div'),
         ... # etc.
]

for url in results:
    extractor.get(url)
    for rule in rules:
        elems = extractor.find_elements(*rule)  # argument unpacking
        if not elems:
            continue  # not found, try next rule
        print(elems[0].getText())
        break  # stop after first successful "find"
    else:  # only executed if no rules match and `break` is never reached, or `rules` list is empty
        print('Could not find anything for url:', url)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...