Как я могу оптимизировать этот скрипт Python, чтобы как можно быстрее очищать страницы?Python

Программы на Python
Ответить
Anonymous
 Как я могу оптимизировать этот скрипт Python, чтобы как можно быстрее очищать страницы?

Сообщение Anonymous »

В настоящее время я использую Playwright с Pandas для сбора данных с веб-сайта с разбивкой на страницы. Сценарий динамически проходит каждую страницу, пока не встретит пустую страницу или страницу без действительных данных. Хотя он работает хорошо, просмотр всех страниц занимает довольно много времени.
Я ищу способы действительно ускорить этот процесс, чтобы он мог опрашивать страницы за считанные секунды. а не минуты. Я открыт для корректировок того, как используется Playwright, оптимизации логики очистки или даже изучения альтернативных библиотек или фреймворков, если они могут быстрее достичь тех же результатов.
Вот сценарий:

Код: Выделить всё

import asyncio
import nest_asyncio
from playwright.async_api import async_playwright
import pandas as pd
from io import StringIO

nest_asyncio.apply()

URL = "https://www.coingecko.com/en/coins/1/markets/spot"
UA = (
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/130.0.0.0 Mobile Safari/537.3"
)

async def scrape_all_pages(base_url):
markets = []
page_num = 1

async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
context = await browser.new_context(user_agent=UA, java_script_enabled=False)
page = await context.new_page()

while True:
url = f"{base_url}?page={page_num}"
await page.goto(url, wait_until="commit")
html = await page.content()

try:
tables = pd.read_html(StringIO(html))
if not tables or len(tables[0]) == 0:
print(f"No data found on page {page_num}. Stopping.")
break
markets.extend(tables)
print(f"Page {page_num} scraped successfully.")
except ValueError:
print(f"Failed to find tables on page {page_num}. Stopping.")
break

page_num += 1

await browser.close()

return pd.concat(markets, ignore_index=True) if markets else pd.DataFrame()

async def main_async():
df = await scrape_all_pages(URL)
if not df.empty:
df = df.dropna(how="all")
output_path = r"C:\Users\Gaming\Downloads\scraped_data.csv"
df.to_csv(output_path, index=False)
print(f"Data saved to '{output_path}'")
else:
print("No data was scraped.")

def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(main_async())

if __name__ == "__main__":
main()
В настоящее время он последовательно обрабатывает одну страницу за раз. Есть ли способ сделать это быстрее, например, за счет распараллеливания запросов или оптимизации способа взаимодействия Playwright с браузером? Мы будем очень признательны за любые советы о том, как добиться максимально возможной скорости парсинга.

Подробнее здесь: https://stackoverflow.com/questions/793 ... s-possible
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»