- JavaScript - это рендеринг сайта на стороне клиента, который симулирует селен. С Selenium вы запускаете веб-драйвер, который загружает текущий веб-сайт и, таким образом, имитирует реального пользователя. Я ожидаю, что именно здесь проблема с aiohttp, что, судя по всему, ваш код не запускает веб-драйвер, поэтому JavaScript на странице никогда не сработает и, следовательно, никогда не будет отображаться.
- Я собираюсь предложить другое решение, чем использование aiohttp, потому что ваша общая цель заключается в повышении скорости очистки.
Предложение Существует модуль под названием Scrapy , который поможет вам параллельно выполнять очистку, переходить по ссылкам, очищать подстраницы и многое другое, что я определенно рекомендую.
Исправление загрузки JS страниц : используете ли вы aiohttp или scrapy, вам нужно будет смоделировать пользователя для JavaScript быть оказанным. Вот (Ура!) Другой модуль под названием Scrapy-Spla sh. Он включает в себя некоторую конфигурацию, и кривая обучения может показаться немного крутой для начала, однако, она поставляется со всем, что вам нужно при просмотре веб-страниц. Для настройки Spla sh я написал здесь еще один ответ очистить скрытые страницы, если поиск дает больше результатов, чем отображается . Я рекомендую взглянуть на это тоже.
Scrapy Spla sh может использоваться непосредственно aiohttp, согласно документации , однако, есть ряд проблем, которые не решаются таким образом, о котором заботится скрап.
Ниже приведен непроверенный пример того, как может выглядеть ваш Паук в Scrapy.
Использование Scrapy: Пример Spider (Не проверено)
import scrapy
from scrapy_splash import SplashRequest
class JustJoinSpider(scrapy.Spider):
name = "justjoin"
splash_args = {
'html': 1,
'png': 1,
'width': 600,
'render_all': 1,
'wait': 0.5
}
def start_requests(self):
urls = [
'https://justjoin.it/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse, args=splash_args)
def parse(self, response):
# magic responses are turned ON by default,
# so the result under 'html' key is available as response.body
html = response.body
# you can also query the html result as usual
title = response.css('title').extract_first()
company-name = response.css('company-name').extract_first()
company-address = response.css('company-address').extract_first()
# full decoded JSON data is available as response.data:
png_bytes = base64.b64decode(response.data['png'])