bs4) Сколько запросов происходит при каждом разборе html? - PullRequest
0 голосов
/ 15 октября 2019

Я получил html-источник по requests и хочу разобрать их как удар (код sudo):

import requests
from bs4 import BeautifulSoup

response = requests.get('https://www.example.com', headers=headers, params=params)

html_doc = response.text
soup = BeautifulSoup(html_doc, 'html.parser')

item_ls = []
for elem in soup.select('.items'):
    item_ls.append(elem.text)

Но я не уверен, что BeutifulSoup obj. запрашивает данные, каждый раз, когда я повторяю элементы на for loop (особенно при выполнении elem.text), или я могу использовать obj. как локальный источник HTML, в отличие от selenium.

Мне нужно минимизировать количество запросов, чтобы избежать блокировки.

1 Ответ

2 голосов
/ 15 октября 2019

Нет. BeautifulSoup не делает дополнительных HTTP-вызовов - это всего лишь анализатор HTML.

import requests
from bs4 import BeautifulSoup

response = requests.get('https://www.example.com', headers=headers, params=params)  # <- the only HTTP call being made here

html_doc = response.text  # <- You have the whole HTML here
soup = BeautifulSoup(html_doc, 'html.parser')

item_ls = []
for elem in soup.select('.items'):  # <- Everything is local
    item_ls.append(elem.text)

Селен работает немного по-другому. Поскольку селеновый веб-драйвер является в большей степени браузером, он также поддерживает JavaScript, встроенный в HTML-код, который может выполнять дополнительные HTTP-вызовы.

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