#python #html #selenium #beautifulsoup
Вопрос:
Поэтому я пытаюсь очистить следующий URL-адрес: Веб-сайт
На странице есть скрытый текст, который открывается после щелчка. Их HTML-код также скрыт и отображается после нажатия кнопок.
Перед щелчком:
После щелчка:
Как я могу очистить этот текст?
BeautifulSoup не работает с этим текстом.
Ответ №1:
Если вы откроете инструменты разработки и нажмете эти кнопки, вы увидите, что отправляете запрос на публикацию в https://en.indonetwork.co.id/ajax.
Таким образом, вы можете либо попытаться повторить это — посмотреть, сможете ли вы захватить полезную нагрузку, отправленную в запросе на публикацию, из фрагмента домашней страницы и отправить ее.
Или вы можете использовать selenium для загрузки страницы, нажатия кнопки и последующего сбора данных.
Ответ №2:
Он не работает с beautifulsoup, потому что это not static
сайт. Я имею в виду, что когда вы нажимаете phone
кнопку, она отправляет запрос в конечную точку api, а затем отображает ответ на этот запрос. Вы можете проверить это на вкладке сеть в инструментах разработки.(Я подтвердил это)
BeautifulSoup извлекает только первый статический html-код из запроса. Он не учитывает запросы, вызванные взаимодействием с пользователем.
Решение этой проблемы есть selenium
.
Вот точные шаги, которые вы можете предпринять, чтобы это сделать.
- Загрузите selenium с помощью браузера с заголовком.(браузер с заголовком позволяет вам легко взаимодействовать с веб-страницей)
- Найдите
phone
кнопку и нажмите на нее. - Подождите некоторое время, пока запрос не будет обработан и отображен на экране.
- Затем вы можете захватить содержимое элемента в соответствии с вашими требованиями.
Не очень хорошее решение
Вы можете напрямую отправить запрос на ту же конечную точку api. Но у него будут некоторые барьеры безопасности, такие как cors, с которых можно будет перейти.
Это не очень хорошее решение, потому что конечная точка api может измениться, или, поскольку этот вызов api содержит номер телефона, они могут сделать это более безопасным для использования в будущем. Но взаимодействие на веб — странице почти не меняется.
Ответ №3:
вам не нужно очищать, под капотом происходит вызов ajax
import requests
import re
from bs4 import BeautifulSoup
soup = BeautifulSoup(requests.get('https://en.indonetwork.co.id/company/surrama-groups').text)
v = soup.find(class_='btn btn-contact btn-contact-phone btn-contact-ajax').attrs
data_id = v['data-id']
data_text = v['data-text']
data_type = v['data-type']
data = requests.post('https://en.indonetwork.co.id/ajax', json={
'id': data_id,
'text': data_text,
'type': data_type,
'url': "leads/ajax"
}).json()
mobile_no = re.findall(r'(d )', data['text'])
print(mobile_no) #['622122520556', '6287885720277']