Что быстрее при разборе: Scrapy или Selenium? - PullRequest
0 голосов
/ 27 июня 2018

Отказ от ответственности: я знаю, что при извлечении динамически сгенерированного контента с помощью веб-драйвера возникают определенные издержки, но этот вопрос касается возможности синтаксического анализа каждого языка. Если вы собираетесь проголосовать за мой вопрос, было бы хорошо, если бы вы могли оставить объяснение!

Простой вопрос: Является ли разбор с одним каркасом более эффективным, чем с другим?

from scrapy.http import HtmlResponse

browser.get(request.url)

Передача динамического содержимого в Scrapy для анализа

body = browser.page_source
response = HtmlResponse(browser.current_url, body=body, encoding='utf-8', request=request)
whatever = response.xpath('//whatever')

Синтаксический анализ с селеном

browser.get(request.url)
whatever = browser.find_elements_by_xpath('//whatever')

Является ли один язык более эффективным, чем другой, при эффективности синтаксического анализа или разница незначительна, когда Selenium получает динамический контент?

Одна из причин, по которой я спрашиваю, состоит в том, что я считаю, что Scrapy гораздо проще в использовании & mdash; намного приятнее синтаксис & mdash; так что я бы, конечно, перешел через page_source, чтобы разобраться с Scrapy, если это не повлияет или не окажет существенного влияния на эффективность моего паука.

1 Ответ

0 голосов
/ 27 июня 2018

Прежде всего, это сравнение яблока с апельсином. Scrapy синтаксический анализ выполняется только при анализе памяти на стороне клиента, в то время как selenium контролирует браузер, вы получаете реальный рендеринг HTML и разумеется, это намного медленнее, чем scrapy в этом случае

Дело в том, что все, что загружает JS / CSS / Images, будет намного медленнее, чем те, которые просто анализируют основной html-файл. Когда вы делаете

whatever = response.xpath('//whatever')

У вас нет накладных расходов, он просто запускает xpath для html-документа в памяти. Когда вы делаете

whatever = browser.find_elements_by_xpath('//whatever')

Это команда JSON RPC, поэтому у вас есть

          http                http/socket 
your code ----> browser agent ------------> browser

Это накладные расходы. Кроме того, браузер всегда работает медленнее, чем просто скачать HTML и проанализировать его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...