Я соскоб https://www.purplebricks.co.uk. Моя цель - получать электронные письма от всех эксперсантов с более чем 1 000 000 почтовых индексов. Но есть только 600 - 700 экспертов и обычно есть 1 - 5 экспертов на 1 странице, таким образом, есть только 200 - 300 полезных почтовых индексов, но я не знаю, какие. Мой код сейчас такой:
URL = "https://www.purplebricks.co.uk/search-local-expert?postcode="
driver = webdriver.Chrome()
emails = set()
postcodes = ['AB1 0AA', 'AB1 1AA', 'AB1 2AA', 'AB1 3AA']
for postcode in postcodes:
postcode_url = (URL + postcode).replace(" ", "%20")
driver.get(postcode_url)
try:
wait = WebDriverWait(driver, 1)
wait = wait.until(EC.presence_of_element_located(
(By.CLASS_NAME, "p_not-found-message_2vB3")))
except TimeoutException:
names = driver.find_elements_by_class_name("p_name_1T9u")
for name in names:
email = name.get_attribute("innerText").replace("\n", ".") + "@purplebricks.com"
emails.add(email)
print(emails)
Это работает так. Он получает html страницы и выполняет поиск, если не найден элемент, например там . Это происходит в большинстве случаев, но в 0,03% есть некоторые эксперты, например там . Я знаю, что их адрес электронной почты - имя. lastname@purplebricks.com, поэтому мне не нужно открывать страницу для каждого. Проблема в том, что он очень медленный + - 1 / se c, поэтому потребуется 1 000 000 секунд, что составляет 11 дней. Есть мои идеи, как улучшить время, но я не могу, если они хороши или как их реализовать.
- Безголовый драйвер:
# initialize options
options = webdriver.ChromeOptions()
# pass in headless argument to options
options.add_argument('--headless')
# initialize driver
driver = webdriver.Chrome(chrome_options=options)
Есть это действительно помогает?
Лучший выбор для поиска: очень велика вероятность того, что номера постов, которые находятся позади, имеют одинаковый результат (те же эксперты или ничего). Вот почему я думаю, что хорошо искать вначале и последнем, что находится посередине, затем прямо между 1. и средним, а также средним и последним. И так далее.
На этом рисунке порядок красный> желтый> синий> фиолетовый. Я думаю, что это хорошо, так что я буду воплощать это в жизнь.
Multi thearding: я не знаю, как это реализовать, но я думаю, что это, безусловно, поможет, поэтому я попытаюсь найти его. Если вы можете дать мне совет, я буду очень счастлив.
Не используйте селен: это, вероятно, поможет больше всего, потому что это очень медленно, и я думаю, что это не нужно для этой сети потому что он возвращает нормальный html по запросу, но я не смог найти нужные элементы в запросах, потому что им нужно время для загрузки, и я не знал, как это сделать. Есть ли способ, как загрузить страницы в какое-то хранилище и чем go через них быстрее?
Спасибо за ответ, потому что я не знаю, что делать. <3 </p>