Я собираю текст со статического веб-сайта (таким образом, очень простой 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='|')