Hej chłopaki mam problemy ze zrozumieniem, jak mogę dodać wyjątki na pętlę w zasięgu. W tej chwili wyciągam adresy URL z arkusza Excela i skrobanie informacji podczas przemieszczania się na całych stronach, aż do osiągnięcia strony 200. Rzecz, że nie wszystkie adresy URL mają strony do 200, więc zajmuje dużo czasu, aż pętla się skończy i Program może kontynuować innym adresem URL. Czy istnieje sposób na wdrożenie wyjątków do kodu tutaj?

from selenium import webdriver
import pandas as pd
import time

driver = webdriver.Chrome("C:/Users/Acer/Desktop/chromedriver.exe")

companies = []

df = pd.read_excel('C:/Users/Acer/Desktop/urls.xlsx')

for index, row in df.iterrows():
    base_url = (row['urls'])
    
    for i in range(1,201,1):
        
        url = "{base_url}?curpage={i}".format(base_url=base_url, i=i)
        driver.get(url)
        time.sleep(2)
        
        name = driver.find_elements_by_xpath('//a/div/div/p')
    
        for names in name:
            print(names.text, url)
            companies.append([names.text, url])
1
Jonas 26 październik 2020, 13:46

1 odpowiedź

Najlepsza odpowiedź

Możesz Ustaw maksymalny limit czasu Na WebDriver, a następnie oglądaj na wyjątki Timeout w pętli:

from selenium.common.exceptions import TimeoutException

MAX_TIMEOUT_SECONDS = 5

driver = webdriver.Chrome("C:/Users/Acer/Desktop/chromedriver.exe")
driver.set_page_load_timeout(MAX_TIMEOUT_SECONDS)

for i in range(1, 201):
    try:
        url = "{base_url}?curpage={i}".format(base_url=base_url, i=i)
        driver.get(url)
    except TimeoutException:
        # skip this if it takes more than 5 seconds
        continue
    ... # process the scraped URL as usual

Jeśli wystąpi limit czasu, bieżąca iteracja jest pomijana przez continue.

2
cs95 26 październik 2020, 10:53