Как я могу записать данные с веб-сайта в файл CSV с помощью Python Playwright (или его альтернатив), избегая при этом ошPython

Программы на Python
Ответить
Anonymous
 Как я могу записать данные с веб-сайта в файл CSV с помощью Python Playwright (или его альтернатив), избегая при этом ош

Сообщение Anonymous »

Я пытаюсь получить данные с этого веб-сайта с помощью Python и Playwright, но столкнулся с несколькими проблемами. Браузер работает в небезголовом режиме, и этот процесс происходит очень медленно. Когда я попробовал другие подходы, например использование запросов и BeautifulSoup, я столкнулся с проблемами доступа, включая ошибки 403 Forbidden и 404 Not Found. Моя цель — эффективно очистить все страницы и сохранить данные в файл CSV.
Вот код, который я сейчас использую:

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

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

URL = "https://www.coingecko.com/en/coins/1/markets/spot"

async def fetch_page(page, url):
print(f"Fetching: {url}")
await page.goto(url)
await asyncio.sleep(5)
return await page.content()

async def scrape_all_pages(url, max_pages=10):
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False, slow_mo=2000)
context = await browser.new_context(viewport={"width": 1280, "height": 900})
page = await context.new_page()

markets = []
for page_num in range(1, max_pages + 1):
html = await fetch_page(page, f"{url}?page={page_num}")
dfs = pd.read_html(StringIO(html))  # Parse tables
markets.extend(dfs)

await page.close()
await context.close()
await browser.close()

return pd.concat(markets, ignore_index=True)

def run_async(coro):
try:
loop = asyncio.get_running_loop()
except RuntimeError:
loop = None

if loop and loop.is_running():
return asyncio.create_task(coro)
else:
return asyncio.run(coro)

async def main():
max_pages = 10
df = await scrape_all_pages(URL, max_pages)
df = df.dropna(how='all')
print(df)

run_async(main())
Основными проблемами являются низкая скорость очистки и ошибки доступа при использовании альтернатив Playwright. Мне нужен совет о том, как улучшить этот подход, будь то путем оптимизации текущего кода, обработки ограничений доступа, таких как подмена пользовательского агента или прокси, или полного переключения на другую библиотеку. Мы будем очень признательны за любые предложения о том, как сделать этот процесс быстрее и надежнее. Спасибо.

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

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

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

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

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

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