@FermerBilli

Скрипт на Python работает медленно, как ускорить?

Всем привет! Есть скрипт для определения в индексе поисковой системы страница или нет и результат записывает в отдельный файл. Скрипт в целом работает, но работает медленно, а мне нужно проверить порядка 300.000 страниц. Подскажите пожалуйста, есть ли способы как то ускорить работу кода? В python новичек.

import requests
import pandas as pd

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"}
d = {}
options = {
'muteHttpExceptions': True,
'followRedirects': False
}

with open('all-website-url.txt', encoding="utf-8") as f:
response_url = [line.strip() for line in f]

for i in response_url:
resp = f'https://www.google.ru/search?q=site:{i}'
response = requests.get(resp, options, headers=headers).text
if "ничего не найдено" in response:
print("Не в индексе")

d.setdefault("URL", []).append(i)
d.setdefault("Статус", []).append("Не в индексе")
else:
print("В индексе")
d.setdefault("URL", []).append(i)
d.setdefault("Статус", []).append("В индексе")

df = pd.DataFrame(data=d)
df.to_excel('./googlecheckindex.xlsx')
  • Вопрос задан
  • 178 просмотров
Пригласить эксперта
Ответы на вопрос 2
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Скрипт в целом работает, но работает медленно, а мне нужно проверить порядка 300.000 страниц. Подскажите пожалуйста, есть ли способы как то ускорить работу кода?

Ваш скрипт выполняет запросы к ПС последовательно, по одному за раз (синхронно), дожидаясь завершения предыдущего. Чтобы радикально увеличить производительность, необходимо выполнять операции параллельно (асинхронно). Используйте asyncio для выполнения асинхронного выполнения скрипта, и aiohttp вместо requests в качестве асинхронного http клиента.
Ответ написан
1HAWK1
@1HAWK1
import requests
import pandas as pd
from concurrent.futures import ThreadPoolExecutor, as_completed

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"
}

options = {
    'muteHttpExceptions': True,
    'followRedirects': False
}

def check_url(url):
    resp = f'https://www.google.ru/search?q=site:{url}'
    response = requests.get(resp, options, headers=headers).text
    if "ничего не найдено" in response:
        return url, "Не в индексе"
    else:
        return url, "В индексе"

def main():
    with open('all-website-url.txt', encoding="utf-8") as f:
        urls = [line.strip() for line in f]

    results = []

    with ThreadPoolExecutor() as executor:
        futures = [executor.submit(check_url, url) for url in urls]
        for future in as_completed(futures):
            url, status = future.result()
            results.append({"URL": url, "Статус": status})
            print(f"{url}: {status}")

    df = pd.DataFrame(results)
    df.to_excel('./googlecheckindex.xlsx', index=False)

if __name__ == '__main__':
    main()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы