Lors de l'utilisation de Python pour explorer des pages dynamiques, l'urllib2 ordinaire ne peut pas être implémenté. Par exemple, la page d'accueil JD ci-dessous chargera le nouveau contenu comme la barre de défilement. tiré vers le bas, et urllib2 ne peut pas explorer ce contenu. Pour le moment, le protagoniste d'aujourd'hui est nécessaire.
Selenium est un outil de test d'applications Web. Les tests Selenium s'exécutent directement dans le navigateur, tout comme les vrais utilisateurs. Les navigateurs pris en charge incluent IE, Mozilla Firefox, Mozilla Suite, etc. Il est également très pratique de l'utiliser pour explorer des pages. Il vous suffit de suivre les étapes d'accès pour simuler une opération humaine. Vous n'avez pas à vous soucier du traitement des cookies et de la session. Cela peut même vous aider à saisir votre compte et votre mot de passe. puis cliquez sur le bouton de connexion. Pour la barre de défilement ci-dessus, il vous suffit de faire défiler le navigateur vers le bas et d'enregistrer la page. Les fonctions ci-dessus sont très utiles lorsqu'il s'agit de certains mécanismes anti-crawler. Ensuite, nous commencerons le texte principal de notre explication et vous amènerons à explorer une page Web dynamique qui nécessite une connexion.
Pour utiliser Selnium, vous devez sélectionner un navigateur appelant et télécharger le pilote correspondant. Dans la version de bureau, vous devez. Vous pouvez choisir Chrome FireFox, etc., vous pouvez utiliser PhantomJS côté serveur, et la version de bureau peut être directement appelée dans le navigateur pour observer les changements, nous pouvons donc généralement changer le navigateur en PhantomJS après avoir débogué la version de bureau avec. Chrome, etc. puis téléchargez-le sur le serveur pour l'exécuter, ici Nous utilisons directement PhantomJS pour la démonstration
Tout d'abord, importez le module :
.
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium import webdriver
Ensuite, initialisez un navigateur Vous pouvez spécifier certains attributs de la page Web chargée dans les paramètres :
cap = webdriver.DesiredCapabilities.PHANTOMJS cap["phantomjs.page.settings.resourceTimeout"] = 180 cap["phantomjs.page.settings.loadImages"] = False driver = webdriver.PhantomJS(executable_path="/home/gaorong/phantomjs-2.1.1-linux-x86_64/bin/phantomjs", desired_capabilities=cap)
Ce qui précède initialise PhantomJS et définit le chemin du navigateur. L'attribut de chargement est sélectionné. Délai d'expiration du chargement des ressources et aucun chargement des images (nous nous soucions uniquement du texte de la page Web). Vous pouvez également choisir d'autres paramètres ici.
Définir certaines propriétés et télécharger une page Web
driver.set_page_load_timeout(180) driver.get('http://www.php.cn/') time.sleep(5) driver.save_screenshot('./login.png') #为便于调试,保存网页的截图
Étant donné que les erreurs sont inévitables lors de l'exécution côté serveur, vous pouvez utiliser save_screenshot pour enregistrer la page Web actuelle afin de faciliter le débogage.
L'étape suivante consiste à saisir le compte et le mot de passe pour vous connecter afin d'obtenir les cookies du site pour les demandes ultérieures.
#输入username和password driver.find_element_by_xpath("/html/body/div[1]/div[1]/login/div[2]/div/form/input[1]").send_keys('*****') time.sleep(1) print 'input user success!!!' driver.find_element_by_xpath("/html/body/div[1]/div[1]/login/div[2]/div/form/input[2]").send_keys('****') time.sleep(1) print 'input password success!!!' driver.find_element_by_xpath("/html/body/div[1]/div[1]/login/div[2]/div/form/button").click() time.sleep(5)
Le code ci-dessus utilise find_element_by_xpath pour obtenir la position de la zone de saisie, entrez le compte et le mot de passe et cliquez sur le bouton de connexion. Vous pouvez voir que c'est très pratique. Il passera automatiquement à la page suivante, il suffit de dormir quelques secondes et d'attendre.
Les informations de la page Web que nous devons explorer se trouvent dans un élément spécifique, nous devons donc déterminer si cet élément apparaît :
try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, 'pulses')) ) print 'find element!!!' except: print 'not find element!!!' print traceback.format_exc() driver.quit()
Ce qui précède détermine si l'élément de classe « pulse » apparaît. S'il n'apparaît pas après 10 secondes d'attente, le sélénum provoquera une erreur TimeoutError.
L'initialisation de base a été effectuée ci-dessus, puis le contenu dynamique doit être traité. Cette page Web, comme JD.com, affichera automatiquement le contenu avec la liste déroulante, donc nous. besoin d'implémenter la barre de défilement déroulante :
print 'begin scroll to get info page...' t1 = time.time() n = 60 #这里可以控制网页滚动距离 for i in range(1,n+1): s = "window.scrollTo(0,document.body.scrollHeight/{0}*{1});".format(n,i) #输出滚动位置,网页大小,和时间 print s, len(driver.page_source),time.time()-t1 driver.execute_script(s) time.sleep(2)
où driver.page_source doit obtenir le texte de la page Web. Une fois le défilement terminé, nous pouvons l'appeler et l'écrire dans un fichier. Ceci complète la logique du programme.
L'utilisation de Selenim peut gérer les stratégies anti-crawler courantes, car elle équivaut à une personne naviguant sur le Web, mais un traitement supplémentaire est requis pour les codes de vérification. . et un autre point est que la vitesse d'accès ne peut pas être trop rapide. Après tout, il faut appeler un navigateur. S'il est trop lent, nous pouvons l'utiliser si nécessaire, nous pouvons utiliser la bibliothèque de requêtes pour fonctionner. .
Voici deux blogs auxquels vous pouvez vous référer : Python Crawler Tool Five : Utilisation du sélénium et fonctions communes
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!