Я ищу способы действительно ускорить этот процесс, чтобы он мог опрашивать страницы за считанные секунды. а не минуты. Я открыт для корректировок того, как используется 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()
Подробнее здесь: https://stackoverflow.com/questions/793 ... s-possible
Мобильная версия