Ok, also habe ich es herausgefunden. Ich habe das Selenium-Modul für Python benutzt, das auf Wunsch einen virtuellen Browser erstellt, mit dem Sie Aktionen wie das Klicken auf Links und das Abrufen der Ausgabe des resultierenden HTML ausführen können. Es gab ein anderes Problem, das ich beim Lösen dieses Problems erfuhr. Die Seite musste geladen werden, ansonsten wurde nur der Inhalt "Loading ..." im Popup-div zurückgegeben, so dass ich das Python-Zeitmodul für 2 Sekunden auf time.sleep(2)
verwendete der zu ladende Inhalt. Dann analysierte ich die resultierende HTML-Ausgabe mit BeautifulSoup, um den Anker-Tag mit der Klasse "gs_citi" zu finden. Dann zog die href vom Anker und legte diese in eine Anfrage mit "Anfragen" -Python-Modul. Schließlich schrieb ich die entschlüsselte Antwort in eine lokale Datei - scholar.bib.
Ich installierte chromedriver und Selen auf meinem Mac diese Anweisungen verwenden hier: https://gist.github.com/guylaor/3eb9e7ff2ac91b7559625262b8a6dd5f
dann von Python-Datei signiert Firewall-Probleme mit diesen Anweisungen zu ermöglichen, zu stoppen: Add Python to OS X Firewall Options?
Im Folgenden ist der Code, den ich verwendet, um die Ausgabedatei „scholar.bib“ zu produzieren:
dies jemand nach einer Lösung, um das hilft
import os
import time
from selenium import webdriver
from bs4 import BeautifulSoup as soup
import requests as req
# Setup Selenium Chrome Web Driver
chromedriver = "/usr/local/bin/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
# Navigate in Chrome to specified page.
driver.get("https://scholar.google.com/scholar?hl=en&q=Sustainability and the measurement of wealth: further reflections")
# Find "Cite" link by looking for anchors that contain "Cite" - second link selected "[1]"
link = driver.find_elements_by_xpath('//a[contains(text(), "' + "Cite" + '")]')[1]
# Click the link
link.click()
print("Waiting for page to load...")
time.sleep(2) # Sleep for 2 seconds
# Get Page source after waiting for 2 seconds of current page in Chrome
source = driver.page_source
# We are done with the driver so quit.
driver.quit()
# Use BeautifulSoup to parse the html source and use "html.parser" as the Parser
soupify = soup(source, 'html.parser')
# Find anchors with the class "gs_citi"
gs_citt = soupify.find('a',{"class":"gs_citi"})
# Get the href attribute of the first anchor found
href = gs_citt['href']
print("Fetching: ", href)
# Instantiate a new requests session
session = req.Session()
# Get the response object of href
content = session.get(href)
# Get the content and then decode() it.
bibtex_html = content.content.decode()
# Write the decoded data to a file named scholar.bib
with open("scholar.bib","w") as file:
file.writelines(bibtex_html)
Hoffnung aus.
Scholar.bib Datei:
@article{arrow2013sustainability,
title={Sustainability and the measurement of wealth: further reflections},
author={Arrow, Kenneth J and Dasgupta, Partha and Goulder, Lawrence H and Mumford, Kevin J and Oleson, Kirsten},
journal={Environment and Development Economics},
volume={18},
number={4},
pages={504--516},
year={2013},
publisher={Cambridge University Press}
}
leider, dass ' "Cite"' Pop-up-Fenster, das Sie schaben wollen, ist ein 'javascript' Ereignis von' 'Cite in der zugrunde liegenden Web-Seite bekommen. Da es sich bei Beautifulsoup um einen Parser und nicht um einen interaktiven Webbrowser handelt, müssen Sie möglicherweise eine Lösung mit "Selen", "PhantomJS" oder einem anderen Tool in Erwägung ziehen. – davedwards
Ich habe versucht, es mit "Selen" zu lösen, aber google erschreckt, wenn ich versuche, mehrere Artikel zu greifen –
@downshift sollten Sie Ihren Kommentar als Antwort hinzufügen – ands