Je suis nouveau dans le webscraping et python. J'ai déjà fait un script qui fonctionnait très bien. Je fais essentiellement la même chose dans celui-ci, mais cela fonctionne beaucoup plus lentement. Voici mon code:
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import selenium
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
import time
start = time.time()
opp = Options()
opp.add_argument('-headless')
browser = webdriver.Firefox(executable_path = "/Users/0581279/Desktop/L&S/Watchlist/geckodriver", options=opp)
browser.delete_all_cookies()
browser.get("https://www.bloomberg.com/quote/MSGFINA:LX")
c = browser.page_source
soup = BeautifulSoup(c, "html.parser")
all = soup.find_all("span", {"class": "fieldValue__2d582aa7"})
price = all[6].text
browser.quit()
print(price)
end = time.time()
print(end-start)
Parfois, une seule page peut prendre jusqu'à 2 minutes à charger. Aussi im juste webscraping Bloomberg. Toute aide serait appréciée :)
3 Réponses :
J'ai donc apporté quelques modifications à votre code et j'ai pu le charger presque instantanément, j'ai utilisé le pilote chrome que j'avais installé, puis j'ai exécuté le code suivant.
34.54 7.527994871139526
pendant les tests, ils m'ont bloqué lol, pourrait vouloir changer les en-têtes de temps en temps. il a également imprimé le prix.
lien chromedriver http://chromedriver.chromium.org/
J'espère que cela vous aidera.
Le résultat était le suivant:
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import selenium
import time
start = time.time()
browser = webdriver.Chrome("/Users/XXXXXXXX/Desktop/Programming/FacebookControl/package/chromedriver")
browser.get("https://www.bloomberg.com/quote/MSGFINA:LX")
c = browser.page_source
soup = BeautifulSoup(c, "html.parser")
all = soup.find_all("span", {"class": "fieldValue__2d582aa7"})
price = all[6].text
browser.quit()
print(price)
end = time.time()
print(end-start)
Le sélénium affecte certains paramètres comme:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
import time
start = time.time()
opp = Options()
opp.add_argument('--blink-settings=imagesEnabled=false')
driver_path = r'Your driver path'
browser = webdriver.Chrome(executable_path=driver_path , options=opp)
browser.delete_all_cookies()
browser.get("https://www.bloomberg.com/quote/MSGFINA:LX")
get_element = browser.find_elements_by_css_selector("span[class='fieldValue__2d582aa7']")
print(get_element[6].text)
browser.quit()
end = time.time()
print(end-start)
Ces situations ne sont généralement pas entre nos mains. Mais la programmation le sont. L'un des moyens d'augmenter la vitesse consiste à bloquer le chargement des images (si nous ne l'utilisons pas). Le blocage des images de chargement affectera le runtime. Voici la façon de le bloquer:
opp.add_argument('--blink-settings=imagesEnabled=false')
Et lorsque vous ouvrez Driver, vous n'avez pas besoin d'utiliser à nouveau BeautifulSoap code > fonction pour obtenir des données. Les fonctions Selenium le fournissent.Essayez de code ci-dessous, Selenium sera plus rapide
If the site is slow, the Selenium script is slow. If the performance of the internet connection is not good, the Selenium script is slow. If the computer running the script is not performing well, the Selenium script is slow.
Utilisation de requêtes et BeautifulSoup , vous pouvez récupérer des informations facilement et rapidement. Voici le code pour obtenir des statistiques clés pour les MSGFINA: LX de bloomberg :
import requests
from bs4 import BeautifulSoup
headers = {
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/72.0.3626.119 Safari/537.36',
'DNT': '1'
}
response = requests.get('https://www.bloomberg.com/quote/MSGFINA:LX', headers=headers)
page = BeautifulSoup(response.text, "html.parser")
key_statistics = page.select("div[class^='module keyStatistics'] div[class^='rowListItemWrap']")
for key_statistic in key_statistics:
fieldLabel = key_statistic.select_one("span[class^='fieldLabel']")
fieldValue = key_statistic.select_one("span[class^='fieldValue']")
print("%s: %s" % (fieldLabel.text, fieldValue.text))
J'ai commencé à recevoir des pages "Êtes-vous un robot" savez-vous comment je peux contourner cela sans avoir à utiliser du sélénium?
Avez-vous essayé des sections de minutage de votre code pour voir quelles lignes particulières le ralentissent? Cela nous aiderait à voir s'il s'agit d'un problème avec votre réseau ou lorsque vous analysez le résultat.
Le problème semble être avec ce browser.get (" bloomberg.com/quote/MSGFINA:LX ")
c'est peut-être la façon dont vous créez le webdriver. essayez d'utiliser Chrome ou supprimez les options car elles ne sont pas nécessaires.