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):
セレンは多くのページを飛ばして、なぜすべてのアイデアを?
が、それはすべてのエラーを生成しない:今、私はエラーが発生した場合の反復をスキップではなく、ループ全体をスキップすることをお勧めするため
?それが何であれば?エラーが発生しなかった場合、作成されたファイルの内容は何ですか? – SDBot
申し訳ありませんが、おそらく私の質問は十分に明確ではありませんでした。このスクリプトではエラーは発生しませんが、たとえば「CrawlingAll」機能を起動すると、取得したいアイテムの乱数がクロールされます。 1000で400または200にすることができます。エラーは発生せず、リストの次の単語をオンにして同じことをします – Boat
コードが正しく理解されていれば、ランダムな要素はありません。 10000で、ページソースを抽出します。これは、try ... exceptブロックで失敗した場合はスキップする唯一の方法です。try .. exceptブロックでprintを試して、失敗した箇所を確認してください。 – SDBot