2017-03-27 16 views
2

私は1000以上のWebサイトで多くのページのHTMLを取得しようとしています。 私のスクリプトは動作していますが、何らかの理由でページの乱数が回復した後にスクリプトは次のページに進みます。彼は私が手に入れたいすべてのページをカウントしていません。PythonでSeleniumを使ってInの範囲を失った

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from bs4 import BeautifulSoup 
import time 
import os.path 


    classes = ["sup","spé","b1","b2","b3","2C", 
    "2A","2D","m1","m2","m3","2B","3C","3B",'3D',"3A"] 


def CrawlingAll(): 


for Classes in classes : 

    dir = os.path.dirname(__file__) 
    print(dir) 
    filename = os.path.join(dir, 'Fiche', Classes) 
    print(filename) 
    if not os.path.exists(filename): 
     os.makedirs(filename) 

    driver = webdriver.Chrome() 

    #Identification 

    driver.get("https://username:[email protected]/sas/common/archives.aspx") 



    year = driver.find_element_by_id("sas_SelectionPlaceHolder__anneeSelect") 
    year.send_keys("1998") 

    classe = driver.find_element_by_id("sas_SelectionPlaceHolder_nomClasse") 
    classe.send_keys(Classes) 

    search = driver.find_element_by_id("sas_SelectionPlaceHolder__btnSubmit") 
    search.click() 

    #iteration du clicks des fiches eleves 
    try: 
     for i in range(1, 10000): 
      fiche = driver.find_element_by_xpath('//*[@id="liste"]/tbody/tr[%s]/td[4]/a'%(i)) 
      fiche.click() 

      driver.switch_to_window(driver.window_handles[1]) #switch vers la pop up 
      source_code = driver.page_source #recuperation du code source de la pop up 
      driver.close() #fermeture de la pop up 
      driver.switch_to_window(driver.window_handles[0]) #retour a la fenetre principale 


    #Ecriture des fiches html/eleves 
      with open("%s/file-"%filename + str(i) + ".html", 'wb') as f: 
       f.write(source_code.encode('utf-16')) 
       f.close() 

    except: 
     print ("======DONE======") 

    driver.close() #fermeture de la fenetre principale 



def Crawlingclasses(): 






print("Select the class your want to crawl: ") 
print(classes) 
Classe = input() 

print("Select when do you want to start crawling ex: 2015: ") 
Year = input() 

dir = os.path.dirname(__file__) 
print (dir) 
filename = os.path.join(dir,'Fiche',Classe) 
print (filename) 


if not os.path.exists(filename): 
    os.makedirs(filename) 




driver = webdriver.Chrome() 

# Identification 

driver.get("https://username:[email protected]/sas/common/archives.aspx") 

# Remplissage des boxs 

# ================================= CRAWLING SUP ================================= 

year = driver.find_element_by_id("sas_SelectionPlaceHolder__anneeSelect") 
year.send_keys(Year) 

classe = driver.find_element_by_id("sas_SelectionPlaceHolder_nomClasse") 
classe.send_keys(Classe) 

search = driver.find_element_by_id("sas_SelectionPlaceHolder__btnSubmit") 
search.click() 

# iteration du clicks des fiches eleves 
try: 
    for i in range(1, 10000): 
     fiche = driver.find_element_by_xpath('//*[@id="liste"]/tbody/tr[%s]/td[4]/a' % (i)) 
     fiche.click() 

     driver.switch_to_window(driver.window_handles[1]) # switch vers la pop up 
     source_code = driver.page_source # recuperation du code source de la pop up 
     driver.close() # fermeture de la pop up 
     driver.switch_to_window(driver.window_handles[0]) # retour a la fenetre principale 

     # Ecriture des fiches html/eleves 
     with open("%s/file-"%filename + str(i) + ".html", 'wb') as f: 
      f.write(source_code.encode('utf-16')) 
      f.close() 

except: 
    print("======DONE======") 

driver.close() # fermeture de la fenetre principale 

ページ数が取得しようとしてここにしようとしている:

for i in range(1, 10000):

セレンは多くのページを飛ばして、なぜすべてのアイデアを?

+0

が、それはすべてのエラーを生成しない:今、私はエラーが発生した場合の反復をスキップではなく、ループ全体をスキップすることをお勧めするため

?それが何であれば?エラーが発生しなかった場合、作成されたファイルの内容は何ですか? – SDBot

+0

申し訳ありませんが、おそらく私の質問は十分に明確ではありませんでした。このスクリプトではエラーは発生しませんが、たとえば「CrawlingAll」機能を起動すると、取得したいアイテムの乱数がクロールされます。 1000で400または200にすることができます。エラーは発生せず、リストの次の単語をオンにして同じことをします – Boat

+0

コードが正しく理解されていれば、ランダムな要素はありません。 10000で、ページソースを抽出します。これは、try ... exceptブロックで失敗した場合はスキップする唯一の方法です。try .. exceptブロックでprintを試して、失敗した箇所を確認してください。 – SDBot

答えて

0

あなたのコードがエラーをキャッチしていますが、try exceptブロックにエラーメッセージを表示していないことは間違いないと思います。

import sys 

for i in range(1, 10000): 
    try: 
     fiche = driver.find_element_by_xpath('//*[@id="liste"]/tbody/tr[%s]/td[4]/a' % (i)) 
     fiche.click() 

     driver.switch_to_window(driver.window_handles[1]) # switch vers la pop up 
     source_code = driver.page_source # recuperation du code source de la pop up 
     driver.close() # fermeture de la pop up 
     driver.switch_to_window(driver.window_handles[0]) # retour a la fenetre principale 

     # Ecriture des fiches html/eleves 
     with open("%s/file-"%filename + str(i) + ".html", 'wb') as f: 
      f.write(source_code.encode('utf-16')) 
      f.close() 
    except: 
     print("Error at iteration %s:"%i, sys.exc_info()[0]) 
関連する問題