Является ли получение страницы «служба недоступна» в Python Селен очистки, предлагая достичь лимита сервера? - PullRequest
0 голосов
/ 04 октября 2018

Я собираю текст со статического веб-сайта (таким образом, очень простой driver.find_element). Проблема в том, что существует 100 миллионов таких страниц, то есть зацикливается на 100 URL, и я хочу минимизировать время.

На данный момент я делаю это методом грубой силы: кодирую как функцию и запускаю 10 питонов одновременно.Тем не менее, даже с 10 питонами, я могу только очистить 12000 страниц в час , что означает, что для очистки всего этого потребуется более 300 дней.

Я пытался увеличить число питонов до 11-12, однако страница « service unavailable » начинает появляться.Означает ли это, что для сервера этого сайта ограничение в 12000 посещений в час?

Т.е. означает ли это, что даже если я перейду на более эффективный пакет " запросы ", это не уменьшит время, необходимое для очистки всей базы данных?

Если нет, как я могу повысить эффективность?

Большое спасибо!Я только что выучил Python за 2 дня и дал мне знать, если мне нужно описать проблему более четко.

Пожалуйста, смотрите мой код ниже:

def func(N):
    from selenium import webdriver
    import csv
    import time
    import pickle
    import pandas as pd
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.wait import WebDriverWait


    start = time.time()
    driver = webdriver.Chrome("\\chromedriver.exe")
    data = {}
    data['zzz'] = []
    data['xxx'] = []
    remove = []

    for i in range(N * 10000 - 9999, N * 10000):
        url = "xxx" + str(i) + ".html"
        print(url)
        driver.get(url)
        count = driver.find_elements_by_xpath("//head[text()='xxx']")
        temp = check_exists_by_class_name("boxed")
        if temp == 1:
            elems = driver.find_elements_by_xpath("//li[contains(text(),':')]")
            if 'zzz' in str(elems[0].text):
                zzz = driver.find_element_by_xpath("//h2[contains(text(),'zzz')]")
                data['zzz'].append(xxx.text)

                if 'xxx' in str(elems[6].text) or 'xxx' in str(elems[5].text) or 'xxx' in str(elems[4].text):
                    xxx = driver.find_element_by_xpath("//li[contains(text(),'xxx')]")
                    data['xxx'].append(xxx.text)
                else:
                    data['xxx'].append("None")
        else:
            remove.append(i)

    print("took", time.time() - start, "seconds.")

    dataframe = pd.DataFrame(data)
    dataframe.to_csv(filename, index=False, sep='|')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...